J'ai rencontré ce problème en essayant d'étendre une classe existante à partir de GitHub. Je vais essayer de m'expliquer, en écrivant d'abord la classe comme je pensais qu'elle devrait être, puis la classe telle qu'elle est maintenant.
Ce que je pensais
namespace mycompany\CutreApi;
use mycompany\CutreApi\ClassOfVendor;
class CutreApi extends \vendor\AwesomeApi\AwesomeApi
{
public function whatever(): ClassOfVendor
{
return new ClassOfVendor();
}
}
Ce que j'ai finalement fait
namespace mycompany\CutreApi;
use \vendor\AwesomeApi\ClassOfVendor;
class CutreApi extends \vendor\AwesomeApi\AwesomeApi
{
public function whatever(): ClassOfVendor
{
return new \mycompany\CutreApi\ClassOfVendor();
}
}
Il semble donc que cette erreur se déclenche également lorsque vous utilisez une méthode qui retourne une classe d'espacement de noms et que vous essayez de renvoyer la même classe mais avec un autre espace de noms. Heureusement j'ai trouvé cette solution, mais je ne comprends pas tout à fait l'intérêt de cette fonctionnalité en php 7.2, pour moi il est normal de réécrire les méthodes de classe existantes au fur et à mesure que vous en avez besoin, y compris la redéfinition des paramètres d'entrée et / ou même le comportement du méthode.
Un inconvénient de l'approche précédente est que les IDE ne pouvaient pas reconnaître les nouvelles méthodes implémentées dans \ mycompany \ CutreApi \ ClassOfVendor (). Donc, pour l'instant, je vais aller avec cette implémentation.
Actuellement fait
namespace mycompany\CutreApi;
use mycompany\CutreApi\ClassOfVendor;
class CutreApi extends \vendor\AwesomeApi\AwesomeApi
{
public function getWhatever(): ClassOfVendor
{
return new ClassOfVendor();
}
}
Donc, au lieu d'essayer d'utiliser la méthode "n'importe quoi", j'en ai écrit une nouvelle appelée "getWwhat". En fait, les deux font la même chose, renvoyant simplement une classe, mais avec différents espaces de noms comme je l'ai décrit précédemment.
J'espère que cela peut aider quelqu'un.
function customMethod( ... )