PHP子类无法实现相同的接口父类实现

时间:2016-10-30 23:47:10

标签: php oop interface extending-classes

子类是否无法实现相同的接口父类实现的正常行为?我得到了PHP v5.6

interface blueprint {
    public function implement_me();
}

class one implements blueprint {

    public function implement_me() {

    }

}

class two extends one implements blueprint {


}

//no fatal error triggered for class two 

编辑:所以上面的代码很好没有错误或警告,即使我在子类blueprint中实现了接口two而没有方法impement_me()为什么是子类无法实现相同的接口父类实现?

如果我为类blueprint实现two以外的其他接口,那么它可以工作,我必须在类blueprint_new内使用two方法,否则会触发致命错误。这部分按预期工作。

interface blueprint {
    public function implement_me();
}

class one implements blueprint {

    public function implement_me() {

    }

}


interface blueprint_new {
    public function todo();
}


class two extends one implements blueprint_new {


}

//this will trigger fatal error.

1 个答案:

答案 0 :(得分:6)

子类自动继承父类的所有接口。

有时你不想要这个,但你仍然可以实现任何,甚至是子类中的多个接口。

唯一不起作用的是扩展接口,就像无法实现类(或抽象类)一样。

第二个代码中触发的错误是因为您没有在类blueprint_new中实现接口two中的所有方法,但基本上代码中没有任何错误。

示例:

class MobilePhone implements GsmSignalPowered {}
class SamsungGalaxy extends MobilePhone implements UsbConnection {}
interface ThunderboltPowered {}
interface GsmSignalPowered {}
interface UsbConnection {}

$s = new SamsungGalaxy();
var_dump($s instanceof GsmSignalPowered); // true
var_dump($s instanceof UsbConnection); // true
var_dump($s instanceof ThunderboltPowered); // false

$m = new MobilePhone();
var_dump($m instanceof GsmSignalPowered); // true
var_dump($m instanceof UsbConnection); // false
var_dump($m instanceof ThunderboltPowered); // false