假设我有一个家长班
class parentClass {
public function myMethod() {
echo "parent - myMethod was called.";
}
}
和下面的子班
class childClass extends parentClass {
public function callThroughColons() {
parent::myMethod();
}
public function callThroughArrow() {
$this->myMethod();
}
}
$myVar = new childClass();
$myVar->callThroughColons();
$myVar->callThroughArrow();
使用两种不同的方法从继承类中调用 myMethod() 有什么区别?
我能想到的唯一区别是 childClass 用他自己的版本重写 myMethod() ,但是还有其他显着差异吗?
我认为双冒号运算符 (::) 应该仅用于调用静态方法,但在调用 $myVar->callThroughColons() 时我没有收到任何警告,即使 E_STRICT 和 E_ALL 打开。这是为什么?
谢谢。
在这种情况下,这没有什么区别。它does如果父类和子类都实现了,就会有所不同myMethod
。在这种情况下,$this->myMethod()
调用当前类的实现,同时parent::myMethod()
显式调用父级方法的实现。parent::
是这种特殊调用的特殊语法,它与静态调用无关。它可以说是丑陋的和/或令人困惑的。
See https://stackoverflow.com/a/13875728/476.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)