gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 04:25:46 29 4
gpt4 key购买 nike

我希望能够传入一个实现了 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com