2010-12-08 36 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)。