簡體   English   中英

PHP中的非靜態方法如何像靜態一樣被調用?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM