PHP - 接口继承 - 申报必须兼容

问题描述 投票:7回答:2

我的界面:

interface AbstractMapper
{
    public function objectToArray(ActiveRecordBase $object);
}

和类:

class ActiveRecordBase
{
   ...
}

class Product extends ActiveRecordBase
{
   ...
}

========

但我不能这样做:

interface ExactMapper implements AbstractMapper
{
    public function objectToArray(Product $object);
}

或这个:

interface ExactMapper extends AbstractMapper
{
    public function objectToArray(Product $object);
}

我有错误“的声明必须兼容”

那么,有没有办法在PHP中做到这一点?

php inheritance interface
2个回答
13
投票

不,一个接口必须严格执行。如果限制实施更具体的子类,它是不一样的接口/签名。 PHP没有仿制药或类似机制。

您可以随时手动检查代码,当然:

if (!($object instanceof Product)) {
    throw new InvalidArgumentException;
}

0
投票

实施这将是另一种方式:

class Executor
{
    public function objectToArray(AbstractMapper $var)
    {
        $this->convert($var);
    }

    private function convert(Product $var)
    {
        ...
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.