2012-08-06 54 views
2

可能重複:
where we use object operator 「->」 in php

在PHP 5,什麼是打字$class::method()的優點,而不是$class->method()

至於任何性能或功能差異。或者這只是一種強制代碼非PHP4友好的方式,因爲完全重寫?

回答

10

在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 
+0

vote up = great;評論說你做到了=愚蠢;評論那(我)=? – 2012-08-06 21:46:27

+0

@tim讓我知道這是否正確處理你的問題,或者如果有什麼你想知道的。 – drew010 2012-08-06 22:05:18

+0

非常好的答案,謝謝你 – tim 2012-08-06 22:20:27

0

$class::method()調用類的靜態方法,而$class->method()調用類的公共標準方法。