Я зіткнувся з цією проблемою, намагаючись розширити існуючий клас від GitHub. Я спробую пояснити себе, спочатку пишу клас так, як я, як і мабуть, а потім клас, як зараз.
Що я хоч
namespace mycompany\CutreApi;
use mycompany\CutreApi\ClassOfVendor;
class CutreApi extends \vendor\AwesomeApi\AwesomeApi
{
public function whatever(): ClassOfVendor
{
return new ClassOfVendor();
}
}
Що я нарешті зробив
namespace mycompany\CutreApi;
use \vendor\AwesomeApi\ClassOfVendor;
class CutreApi extends \vendor\AwesomeApi\AwesomeApi
{
public function whatever(): ClassOfVendor
{
return new \mycompany\CutreApi\ClassOfVendor();
}
}
Так виглядає, що ця помилка виникає також, коли ви використовуєте метод, який повертає клас простору імен, і ви намагаєтесь повернути той же клас, але з іншим простором імен. На щастя, я знайшов це рішення, але я не повністю розумію перевагу цієї функції в php 7.2, для мене нормально переписати існуючі методи класу як потрібні, включаючи переосмислення вхідних параметрів та / або навіть поведінку метод.
Недоліком попереднього підходу є те, що IDE не змогли розпізнати нові методи, реалізовані в \ mycompany \ CutreApi \ ClassOfVendor (). Тож поки що я піду з цією реалізацією.
В даний час зроблено
namespace mycompany\CutreApi;
use mycompany\CutreApi\ClassOfVendor;
class CutreApi extends \vendor\AwesomeApi\AwesomeApi
{
public function getWhatever(): ClassOfVendor
{
return new ClassOfVendor();
}
}
Отже, замість того, щоб намагатися використовувати метод "що завгодно", я написав новий під назвою "getWever". Насправді вони обидва роблять те саме, просто повертаючи клас, але з просторами імен різних, як я описав раніше.
Сподіваюся, це може комусь допомогти.
function customMethod( ... )