Napotkałem ten problem podczas próby rozszerzenia istniejącej klasy z GitHub. Spróbuję się wytłumaczyć, najpierw pisząc zajęcia tak, jak myślałem, że powinny, a potem zajęcia tak, jak jest teraz.
Co myślałem
namespace mycompany\CutreApi;
use mycompany\CutreApi\ClassOfVendor;
class CutreApi extends \vendor\AwesomeApi\AwesomeApi
{
public function whatever(): ClassOfVendor
{
return new ClassOfVendor();
}
}
Co w końcu zrobiłem
namespace mycompany\CutreApi;
use \vendor\AwesomeApi\ClassOfVendor;
class CutreApi extends \vendor\AwesomeApi\AwesomeApi
{
public function whatever(): ClassOfVendor
{
return new \mycompany\CutreApi\ClassOfVendor();
}
}
Wygląda więc na to, że ten błąd pojawia się również wtedy, gdy używasz metody zwracającej klasę z przestrzenią nazw i próbujesz zwrócić tę samą klasę, ale z inną przestrzenią nazw. Na szczęście znalazłem to rozwiązanie, ale nie do końca rozumiem korzyści płynące z tej funkcji w php 7.2, dla mnie normalne jest przepisywanie istniejących metod klas tak, jak ich potrzebujesz, w tym przedefiniowanie parametrów wejściowych i / lub nawet zachowanie metoda.
Jedną z wad poprzedniego podejścia jest to, że IDE nie mogły rozpoznać nowych metod zaimplementowanych w \ mycompany \ CutreApi \ ClassOfVendor (). Więc na razie pójdę z tą implementacją.
Obecnie zrobione
namespace mycompany\CutreApi;
use mycompany\CutreApi\ClassOfVendor;
class CutreApi extends \vendor\AwesomeApi\AwesomeApi
{
public function getWhatever(): ClassOfVendor
{
return new ClassOfVendor();
}
}
Więc zamiast próbować użyć metody „cokolwiek”, napisałem nową o nazwie „getWhthing”. W rzeczywistości obie robią to samo, po prostu zwracają klasę, ale z różnymi przestrzeniami nazw, jak opisałem wcześniej.
Mam nadzieję, że to może komuś pomóc.
function customMethod( ... )