Ich war mit diesem Problem konfrontiert, als ich versuchte, eine vorhandene Klasse von GitHub aus zu erweitern. Ich werde versuchen, mich selbst zu erklären, indem ich zuerst die Klasse so schreibe, wie ich es mir vorgestellt habe, und dann die Klasse so, wie sie jetzt ist.
Was ich aber
namespace mycompany\CutreApi;
use mycompany\CutreApi\ClassOfVendor;
class CutreApi extends \vendor\AwesomeApi\AwesomeApi
{
public function whatever(): ClassOfVendor
{
return new ClassOfVendor();
}
}
Was ich endlich getan habe
namespace mycompany\CutreApi;
use \vendor\AwesomeApi\ClassOfVendor;
class CutreApi extends \vendor\AwesomeApi\AwesomeApi
{
public function whatever(): ClassOfVendor
{
return new \mycompany\CutreApi\ClassOfVendor();
}
}
Es scheint also, dass dieser Fehler auch auftritt, wenn Sie eine Methode verwenden, die eine Klasse mit Namespace zurückgibt, und Sie versuchen, dieselbe Klasse mit einem anderen Namespace zurückzugeben. Glücklicherweise habe ich diese Lösung gefunden, aber ich verstehe den Nutzen dieser Funktion in PHP 7.2 nicht vollständig. Für mich ist es normal, vorhandene Klassenmethoden nach Bedarf neu zu schreiben, einschließlich der Neudefinition von Eingabeparametern und / oder sogar des Verhaltens der Methode.
Ein Nachteil des vorherigen Ansatzes ist, dass IDEs die neuen Methoden, die in \ mycompany \ CutreApi \ ClassOfVendor () implementiert sind, nicht erkennen konnten. Daher werde ich vorerst mit dieser Implementierung fortfahren.
Derzeit fertig
namespace mycompany\CutreApi;
use mycompany\CutreApi\ClassOfVendor;
class CutreApi extends \vendor\AwesomeApi\AwesomeApi
{
public function getWhatever(): ClassOfVendor
{
return new ClassOfVendor();
}
}
Anstatt zu versuchen, die "was auch immer" -Methode zu verwenden, habe ich eine neue mit dem Namen "getWhatever" geschrieben. Tatsächlich machen beide dasselbe und geben nur eine Klasse zurück, aber mit unterschiedlichen Namespaces, wie ich zuvor beschrieben habe.
Hoffe das kann jemandem helfen.
function customMethod( ... )