我的界面:
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没有仿制药或类似机制。
您可以随时手动检查代码,当然:
if (!($object instanceof Product)) {
throw new InvalidArgumentException;
}
实施这将是另一种方式:
class Executor
{
public function objectToArray(AbstractMapper $var)
{
$this->convert($var);
}
private function convert(Product $var)
{
...
}
}