[英]How is it that a non-static method in PHP can be invoked as if it were static?
請參閱以下代碼。 我在類Foo
定義了一個稱為bar
的非靜態方法。 但是我使用Foo::bar()
語法調用該方法,就好像它是靜態的一樣。 它的工作原理: http : //ideone.com/I45zLx 。
<?php
class Foo
{
public function bar()
{
echo "hello, world\n";
}
}
Foo::bar();
?>
為什么沒有出現致命錯誤,我試圖將非靜態方法稱為靜態方法? 您能指出我這一點的官方PHP文檔嗎?
您不會在這里收到致命消息,而會收到嚴格標准通知。
嚴格標准:非靜態方法Foo :: bar()不應靜態調用
始終啟用error_reporting(-1);
在您測試的任何代碼上。 如果啟用了此功能,您可能會在輸出中看到以上內容。
在here
查看文檔
我認為它將產生警告。 可能是E_STRICT。
定義靜態方法的主要原因是您不能使用$ this對象引用靜態函數內的任何其他公共成員。
如果嘗試在靜態函數中使用$ this,則會出現致命錯誤:如果不在對象上下文中使用$ this。
概念是,靜態方法與限制有關,並且在程序執行期間如何處理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.