Enfrenté este problema al intentar extender una clase existente desde GitHub. Voy a tratar de explicarme, primero escribiendo la clase como pensé que debería ser, y luego la clase como es ahora.
Lo que pensé
namespace mycompany\CutreApi;
use mycompany\CutreApi\ClassOfVendor;
class CutreApi extends \vendor\AwesomeApi\AwesomeApi
{
public function whatever(): ClassOfVendor
{
return new ClassOfVendor();
}
}
Lo que finalmente hice
namespace mycompany\CutreApi;
use \vendor\AwesomeApi\ClassOfVendor;
class CutreApi extends \vendor\AwesomeApi\AwesomeApi
{
public function whatever(): ClassOfVendor
{
return new \mycompany\CutreApi\ClassOfVendor();
}
}
Entonces, parece que este error surge también cuando está utilizando un método que devuelve una clase con espacio de nombres e intenta devolver la misma clase pero con otro espacio de nombres. Afortunadamente he encontrado esta solución, pero no entiendo completamente el beneficio de esta característica en php 7.2, para mí es normal reescribir los métodos de clase existentes a medida que los necesite, incluida la redefinición de los parámetros de entrada y / o incluso el comportamiento del método.
Una desventaja del enfoque anterior es que los IDE no podían reconocer los nuevos métodos implementados en \ mycompany \ CutreApi \ ClassOfVendor (). Entonces, por ahora, iré con esta implementación.
Hecho actualmente
namespace mycompany\CutreApi;
use mycompany\CutreApi\ClassOfVendor;
class CutreApi extends \vendor\AwesomeApi\AwesomeApi
{
public function getWhatever(): ClassOfVendor
{
return new ClassOfVendor();
}
}
Entonces, en lugar de intentar usar el método "lo que sea", escribí uno nuevo llamado "getWhatever". De hecho, ambos están haciendo lo mismo, solo devuelven una clase, pero con diferentes espacios de nombres como he descrito antes.
Espero que esto pueda ayudar a alguién.
function customMethod( ... )