我有界面:
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中执行此操作?
答案 0 :(得分:13)
不,必须实现完全的接口。如果将实现限制为更具体的子类,则它不是相同的接口/签名。 PHP没有泛型或类似的机制。
您总是可以手动签入代码:
if (!($object instanceof Product)) {
throw new InvalidArgumentException;
}
答案 1 :(得分:0)
另一种实现方法是:
class Executor
{
public function objectToArray(AbstractMapper $var)
{
$this->convert($var);
}
private function convert(Product $var)
{
...
}
}