2010-12-08 51 views

回答

1

靜態方法來方便,當我們想分享一個類的對象之間 信息,或想表示的關聯類本身,而不是任何特定對象的東西 。

兩者之間的區別在於它們被調用的方式。 例如,Message::listmessages()是一個靜態方法和可以被稱爲是這樣的:

$messages = Message::listmessages($args); 

無需先使類消息的一個目的,爲了使用上面。此外,請注意,這應該用於當您要在確定的預配置變量上返回結果並且不基於類的屬性時使用此消息

但是,$message->listmessages()是一種實例方法,可以像這樣調用:

$message = new Message(); 
$messages->$args = $args 
$messages= $message->listmessages(); 

當您想調用Message類的運行時屬性上的函數時,它用於泛型occassions。

1

我的理解你的問題,

我們使用C這樣Message::listMessages();C++

,但我們使用PHP正確的語法是$message->listMessages();

謝謝。

+2

PHP支持`::`和` - >`操作符,但它們的含義不同。請參閱其他解釋。 – Asaph 2010-12-08 06:25:58

+0

好的..謝謝您的參考。 – Chandresh 2010-12-08 06:27:26

1

我假設你Message類是這樣定義的:

class Message { 
    //... 
    static function listMessages() { 
    //... 
    } 
    //... 
} 

他們是一樣的,他們都調用靜態方法從MessagelistMessages,然而,$message->listMessages()需要較少的查找。在

$ php5-cgi 
<?php 
class A { static function f() { } 
      function f() { } } 
?> 
PHP Fatal error: Cannot redeclare A::f() in - on line 2 
Status: 500 Internal Server Error 
X-Powered-By: PHP/5.3.2-1ubuntu4.5 
Content-type: text/html 
+0

PHP允許你定義一個非靜態方法並靜態或非靜態地調用它。像這樣:`class A {function f(){}} A :: f(); $ a = new A(); $ A-> F();`。不是我會推薦做這樣的廢話,但PHP確實允許。 – Asaph 2010-12-08 06:44:17

1

這是調用靜態方法,即一個方法:

根據測試,你不能宣佈兩個方法有相同的名字,一個靜態和一個成員

Message::listMessages(); 

這是一個對象上調用實例方法,即方法(又名一個類的實例):

$message->listMessages(); 
0

Message類正在調用自己的方法沒有對象意味着該方法是靜態的沒有對象有權調用此方法只有類可以調用。

Message::listMessages(); 

Message類的對象調用的公共方法

$message->listMessages(); 
1

消息:: listMessages()是一個靜態的功能,因此它應該被用來當listMessages()被忽視你的對象propretyes即,返回一些類常量或變量或......任何你喜歡的東西。(靜態意味着它應該對Message類的所有實例具有相同的輸出)

$ message-> listMessages()可能使用您的對象屬性,因此對於同一個Message類的兩個不同對象,輸出可能不同(例如$ messages和$ message1)。