php - 传入接口(interface)类型作为函数参数抛出 "Delaration must match ..."

标签 php database repository

我希望能够传入一个实现了 IEntity 接口(interface)的对象,但是我面临着一个

PHP Fatal error:  Declaration of ShirtOrderRepository::find(ShirtOrder $shirtOrder) must be compatible with RepositoryInterface::find(IEntity $entity) in /Users/okkamiadmin
/projects/Befeni/index.php on line 52

错误,我不确定我是否以正确的方式做这件事,我该如何实现?

<?php

interface IEntity {
    public function getTableName();
}

class ShirtOrder implements IEntity
{
    public $id;
    public $customerId;
    public $fabricId;
    public $collarSize;
    public $chestSize;
    public $waistSize;
    public $wristSize;

    public function getTableName()
    {
        return 'shirt_orders';
    }
}

interface RepositoryInterface
{
    public function find(IEntity $entity);
    public function save(IEntity $entity);
    public function remove(IEntity $entity);
}

interface DatabaseInterface {

    public function find(IEntity $entity);
    public function save(IEntity $entity);
    public function remove(IEntity $entity);

}

class ShirtOrderRepository implements RepositoryInterface {
    protected $db;

    public function __construct(DatabaseInterface $db) {
        $this->db = $db;
    }

    public function find(ShirtOrder $shirtOrder)
    {
        $this->db->find($shirtOrder);
    }

    public function save(ShirtOrder $shirtOrder)
    {
        $this->db->save($shirtOrder);
    }

    public function remove(ShirtOrder $shirtOrder)
    {
        $this->db->remove($shirtOrder);
    }
}

最佳答案

您需要像这样在 ShirtOrderRepository 类中传递 IEntity 而不是 ShirtOrder 的类型:

public function find(IEntity $shirtOrder){
  $this->db->find($shirtOrder);
}

您还需要为其余方法执行此操作,因为 RepositoryInterface 需要在其方法参数中传递 IEntity 类型。

关于php - 传入接口(interface)类型作为函数参数抛出 "Delaration must match ...",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73171637/

相关文章:

database - 在共享主机上备份大数据库。试过 mysqldump 和 phpmyadmin

Spring Data JPA - 如何通过带下划线的参数查找

git - 从命令行创建 GitHub 存储库

php - 自定义和添加 woocommerce 模板数据

database - 云上用的是什么数据库,背后的概念是什么?

php - 查找存在于多个表中的记录

database - 在 Oracle 中推荐的加密方式是什么?

eclipse - 为Eclipse中的项目添加Maven存储库?

javascript - 如何正确连接reCAPTCHA?

php - domPDF - 如果达到页面高度,表格总是会底部