說我有一個父類
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,我也不會收到任何警告。這是爲什麼?
謝謝。
即使我使用parentClass :: myMethod()而不是parent ::,但我沒有得到任何警告,但我得到了總體思路 - 使用::運算符從繼承類調用方法並不真正生成靜態調用,這是一個特例。謝謝。 – user2339681
@ user2339681您收到E_STRICT錯誤。當您將錯誤報告更高時,您會看到它。 – bwoebi