Oop PHP ClassA::load()必须与InterfaceA::load()兼容
我有一些课程:Oop PHP ClassA::load()必须与InterfaceA::load()兼容,oop,Oop,我有一些课程: class ClassA implements InterfaceA { public function load(Foo $foo) { } } interface InterfaceA { public function load(InterfaceFoo $foo); } class Foo implements InterfaceFoo { } 我的问题是为什么我的ClassA::load(Foo$Foo)方法与我的Interfa
class ClassA implements InterfaceA {
public function load(Foo $foo) {
}
}
interface InterfaceA {
public function load(InterfaceFoo $foo);
}
class Foo implements InterfaceFoo
{
}
我的问题是为什么我的ClassA::load(Foo$Foo)方法与我的InterfaceA::load(InterfaceFoo$Foo)不兼容,即使类Foo实现了InterfaceFoo
我知道我可以写我的ClassA如下:
class ClassA implements InterfaceA {
public function load(InterfaceFoo $foo) {
if (!($foo instanceof Foo)) {
throw new Exception("InterfaceFoo must be an instance of Foo");
}
}
}
但是我仍然不明白为什么前面的方法不起作用。你不能这样做,因为它违反了InterfaceA合同
load
方法表示它可以与InterfaceFoo的任何具体实现一起工作,而不仅仅是特定的实现。
这就是所谓的多态性,是好的
您可以在load方法中友好地向下转换foo param,以检查它是否是像foo这样的具体实现。就像我在第二部分中所做的那样?其中我检查
是否(!($foo instanceof foo)){