[英]parent::method() - calling non static method
我不理解在PHP中調用父方法的概念。 父方法不是靜態的,但它是靜態調用的 - 通常PHP會拋出錯誤/警告。
問題是,這是來自PHP的怪癖,還是它應該如何在OOP中?
以php.net為例:
<?php
class A {
function example() {
echo "I am A::example() and provide basic functionality.<br />\n";
}
}
class B extends A {
function example() {
echo "I am B::example() and provide additional functionality.<br />\n";
parent::example();
}
}
$b = new B;
// This will call B::example(), which will in turn call A::example().
$b->example();
?>
http://php.net/manual/en/keyword.parent.php
在PHP 5中,靜態調用非靜態方法會生成E_STRICT級別警告。
所以我們可以把這個論點作為PHP的借口。 順便說一句,在C ++中它以相同的方式完成。
但是還有其他語言,就像你說的那樣。 例如,在JAVA中 ,父方法稱為super.printMethod();
在C#中 ,它就像base.printMethod()
。
因此在PHP中可能會為解析器的簡單性做好准備,因為對於這樣的調用parent->printMethod()
,它們需要特定的邊緣情況。
該通知意味着您不能將非靜態定義的方法稱為靜態,但您在方法內執行的調用不是靜態調用,而是對父類的調用。
所以這個調用將拋出E_STRICT警告:
$b = new B;
$b::example();
但你的例子不會
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.