定义继承和多态性时出现不兼容类型的异常

时间:2019-06-25 18:04:55

标签: php oop

我定义了一个DTO类,然后定义了一个从第一个类扩展的类。

namespace App\DTO;

class DTO {};



namespace App\Modules\Auth\User\DTO;

class DTO extends App\DTO\DTO {

...Some definitions here

}

接下来,我创建了一个通用的存储库接口;

namespace App\Interfaces;

interface iRepository {

   public function create(App\DTO\DTO $data);

}

最后,是我的用户模型的类存储库;

namespace App\Modules\Auth\Repository;   

class UserRepository implements App\Interfaces\iRepository {

   public function create(App\Modules\Auth\DTO\SignUpDTO $data) {

      ...some code here
   }
}

我在函数创建中遇到有关不兼容类型的错误。

Symfony\Component\Debug\Exception\FatalErrorException: Declaration of App\Modules\Auth\Repository\UserRepository::create(App\Modules\Auth\DTO\SignUpDTO $data) must be compatible with App\Interfaces\RepositoryInterface::create(App\DTO\DTO $object)

我认为多态性意味着我可以同时使用App \ DTO \ DTO和App \ Modules \ Auth \ DTO \ SignUpDTO,因为第二个继承了第一个。

1 个答案:

答案 0 :(得分:-1)

最后,我必须通过更改“ create”方法的签名并将DTO类设置为参数来解决此问题。像这样:

namespace App\Modules\Auth\Repository;   

class UserRepository implements App\Interfaces\iRepository {

   public function create(App\DTO\DTO $data) {

      ...some code here
   }
}

这样,我可以使用SignUpDTO作为参数来调用create方法。