我希望能够传入一个实现IEntity接口的对象,但我面临一个

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相关问答推荐

让所有具有相同名称的产品在WooCommerce中更改价格

为什么正则表达式与得到的文本块之前得到的也行?

根据未用于变体的产品属性隐藏WooCommerce发货方式

SendGrid响应PHP

fpm-php + nginx + POST数据

在WooCommerce上设置简单和可变产品的最小订单量

根据WooCommerce中的自定义用户元数据值更改用户角色

在WooCommerce管理中为订单项目添加自定义字段价格值

Regex|PHP捕获json字符串中的每个非法双引号

PHP 8.2 弃用日志(log)存储在 Laravel 10.22.0 中的哪里?

如何处理 Null 上的 array_shift() ?

.htaccess环境变量条件不被判断

使用 PHP 正则表达式从仅包含具有现有顺序的顶级标签的 XML 文档中搜索和创建数组

正则表达式 (php) 匹配单个 [ 或单个 ] 但忽略 [[ ]] 之间的任何内容?

如何将数字文本文件添加到 PHP 数学方程式中?

NetBeans 不显示中文内容

如何在 Laravel 中验证多个输入?

复杂的mysql查询问题

如何在 Laravel 中保存多对多

PHP路由不重定向