爲什麼在PHP中這是合法的?使用PHP中的類的非靜態函數
<?php
class Foo {
public function test() {
echo "hello\n";
}
}
Foo::test();
?>
test()是一個非靜態函數,但我可以在沒有實例的情況下訪問它。
爲什麼在PHP中這是合法的?使用PHP中的類的非靜態函數
<?php
class Foo {
public function test() {
echo "hello\n";
}
}
Foo::test();
?>
test()是一個非靜態函數,但我可以在沒有實例的情況下訪問它。
我相信這是因爲向後兼容。在PHP4中,您沒有方法的static關鍵字(仍在尋找引用,但到目前爲止,這些都是我找到的所有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=34990和http://bugs.php.net/bug.php?id=47891最好的。
我不相信你可以通過一個對象的實例訪問一個類的方法。
這是合法的,但通常會皺起眉頭,直到您在靜態調用的方法中引用$this
,這會引發致命錯誤。
調用非靜態方法靜態 產生E_STRICT級別的警告。
這是可行的,因爲您尚未啓用E_STRICT錯誤級別。一旦啓用PHP將停止讓你這樣做。
不,你可以。這確實有用。 – ryeguy 2009-11-17 21:57:25