Ho affrontato questo problema mentre cercavo di estendere una classe esistente da GitHub. Proverò a spiegarmi, prima scrivendo la classe come pensavo che dovrebbe essere, e poi la classe come è adesso.
Quello che ho pensato
namespace mycompany\CutreApi;
use mycompany\CutreApi\ClassOfVendor;
class CutreApi extends \vendor\AwesomeApi\AwesomeApi
{
public function whatever(): ClassOfVendor
{
return new ClassOfVendor();
}
}
Quello che ho finalmente fatto
namespace mycompany\CutreApi;
use \vendor\AwesomeApi\ClassOfVendor;
class CutreApi extends \vendor\AwesomeApi\AwesomeApi
{
public function whatever(): ClassOfVendor
{
return new \mycompany\CutreApi\ClassOfVendor();
}
}
Quindi sembra che questo errore venga generato anche quando si utilizza un metodo che restituisce una classe con spazio dei nomi e si tenta di restituire la stessa classe ma con un altro spazio dei nomi. Fortunatamente ho trovato questa soluzione, ma non comprendo appieno i vantaggi di questa funzionalità in php 7.2, per me è normale riscrivere i metodi delle classi esistenti quando ne hai bisogno, inclusa la ridefinizione dei parametri di input e / o anche il comportamento del metodo.
Uno svantaggio del precedente approccio è che gli IDE non sono stati in grado di riconoscere i nuovi metodi implementati in \ mycompany \ CutreApi \ ClassOfVendor (). Quindi, per ora, seguirò questa implementazione.
Attualmente fatto
namespace mycompany\CutreApi;
use mycompany\CutreApi\ClassOfVendor;
class CutreApi extends \vendor\AwesomeApi\AwesomeApi
{
public function getWhatever(): ClassOfVendor
{
return new ClassOfVendor();
}
}
Quindi, invece di provare a usare il metodo "qualunque", ne ho scritto uno nuovo chiamato "getWwhat". In realtà entrambi stanno facendo lo stesso, restituendo solo una classe, ma con spazi dei nomi diversi come ho descritto prima.
Spero che questo possa aiutare qualcuno.
function customMethod( ... )