在PHP 5,什麼是打字$class::method()
的優點,而不是$class->method()
?
至於任何性能或功能差異。或者這只是一種強制代碼非PHP4友好的方式,因爲完全重寫?
在PHP 5,什麼是打字$class::method()
的優點,而不是$class->method()
?
至於任何性能或功能差異。或者這只是一種強制代碼非PHP4友好的方式,因爲完全重寫?
在PHP5中,兩者不可互換。
靜態方法調用的執行速度比非靜態調用要快(在許多迭代中),但是此方法在靜態上下文中調用,並且沒有可用於被調用方法的對象。
PHP允許您使用靜態表示法調用非靜態方法的唯一原因是在PHP 4中向後兼容(,因爲PHP 4沒有函數的靜態修改器,或者public/protected/private) 。如果您確實靜態調用非靜態方法,則會收到有關「嚴格標準」輸出的警告,並且最終可能會失敗並出現致命錯誤。
所以答案的確是按照它應該被調用的方式來調用方法。如果它是PHP 5中的靜態方法,則靜態調用它Class::method()
,如果它是公共方法,則使用對象$class->method()
調用它。
考慮這個代碼(在PHP 5中運行):
class Foo {
protected $bar = 'bar';
function f() {
echo $this->bar;
}
}
echo Foo::f(); // Fatal error: Using $this when not in object context
$class::method()
調用類的靜態方法,而$class->method()
調用類的公共標準方法。
vote up = great;評論說你做到了=愚蠢;評論那(我)=? – 2012-08-06 21:46:27
@tim讓我知道這是否正確處理你的問題,或者如果有什麼你想知道的。 – drew010 2012-08-06 22:05:18
非常好的答案,謝謝你 – tim 2012-08-06 22:20:27