PHP child class 无法实现相同的接口 parent class 实现
PHP child class cannot implement same interface parent class implements
child class 不能实现相同的接口 parent class 实现是正常行为吗?我得到了 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
编辑: 所以上面的代码运行良好,没有错误或警告,即使我在 child class [=18 中实现了接口 blueprint
=] 没有方法 impement_me()
为什么 child class 不能实现相同的接口 parent class 实现?
如果我为 class two
实现 blueprint
以外的另一个接口,那么它就可以工作,我必须在 class [=] 中使用 blueprint_new
方法18=] 否则触发致命错误。这部分按预期工作。
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.
子 class 自动继承父 class 的所有接口。
有时你不想要这个,但你仍然可以实现 any,甚至在子 class.
中实现多个接口
唯一不行的是扩展一个接口,就像一个class(或者一个抽象的class)无法实现
你的第二个代码触发的错误是因为你没有在classtwo
中实现接口blueprint_new
的所有方法,但基本上你的代码没有错。
示例:
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
child class 不能实现相同的接口 parent class 实现是正常行为吗?我得到了 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
编辑: 所以上面的代码运行良好,没有错误或警告,即使我在 child class [=18 中实现了接口 blueprint
=] 没有方法 impement_me()
为什么 child class 不能实现相同的接口 parent class 实现?
如果我为 class two
实现 blueprint
以外的另一个接口,那么它就可以工作,我必须在 class [=] 中使用 blueprint_new
方法18=] 否则触发致命错误。这部分按预期工作。
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.
子 class 自动继承父 class 的所有接口。
有时你不想要这个,但你仍然可以实现 any,甚至在子 class.
中实现多个接口唯一不行的是扩展一个接口,就像一个class(或者一个抽象的class)无法实现
你的第二个代码触发的错误是因为你没有在classtwo
中实现接口blueprint_new
的所有方法,但基本上你的代码没有错。
示例:
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