【发布时间】:2012-12-02 01:34:37
【问题描述】:
为什么我会收到此错误:
Fatal error: Declaration of ConcreteFooMapper::load() must be compatible with that of AbstractFooMapper::load() on line 18
从此代码:
<?php
interface Foo {
public function foo();
}
class ConcreteFoo implements Foo {
public function foo() {
}
}
abstract class AbstractFooMapper {
abstract public function load(Foo $entity, array $data);
}
class ConcreteFooMapper extends AbstractFooMapper {
public function load(ConcreteFoo $entity, array $data) {
}
}
?>
我最初的想法是这是一个错误; PHP 在评估方法声明时没有检测到 ConcreteFoo 实现了 Foo 。我认为这是因为当您运行此代码时:
<?php
interface Foo {
public function foo();
}
class ConcreteFoo implements Foo {
public function foo() {
}
}
$foo = new ConcreteFoo();
if ($foo instanceof Foo)
{
print 'w00t!';
}
else
{
print 'FAIL!';
}
?>
它打印出 w00t! 表明 ConcreteFoo 是 Foo 的一个实例。
对这种行为是否正确有任何见解吗?
【问题讨论】:
标签: php oop inheritance