簡體   English   中英

在PHP中訪問類的非靜態函數

[英]Access of Non-Static Function of a Class in PHP

為什么這在PHP中合法?

<?php
class Foo {
    public function test() {
        echo "hello\n";
    }
}

Foo::test();
?>

test()是一個非靜態函數,但我可以在沒有實例的情況下訪問它。

它是合法的,但通常不贊成,直到您在靜態調用的方法中引用$this ,這將導致致命的錯誤。

我相信這是因為向后兼容性。 在PHP4中你沒有方法的靜態關鍵字(仍然在尋找參考,但到目前為止,這是我發現的所有http://us2.php.net/manual/en/language.oop5.static.php ) 。 這樣,PHP4代碼仍然可以正常運行。

最好的做法是聲明你的靜態函數,如果你打開E_STRICT,你會看到關於這個的通知。

error_reporting(E_ALL | E_STRICT);

更新 :嗯,這是我發現的最好的http://bugs.php.net/bug.php?id=34990http://bugs.php.net/bug.php?id=47891

PHP手冊

靜態調用非靜態方法會生成E_STRICT級別警告。

這是有效的,因為您尚未啟用E_STRICT錯誤級別。 啟用后,PHP將停止讓您執行此操作。

我不相信你可以訪問一個沒有對象實例的類的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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