课堂提问 - 初学者帮助

时间:2010-12-08 06:12:02

标签: php class

  

可能重复:
  In PHP, whats the difference between :: and -> ?

这是我上一个问题的延续 - 但我认为它的独特性足以保证一个新问题。

有什么区别:

Message::listMessages(); 

$message->listMessages(); 

我正在创建一个迷你cms,我想要一个以统一方式显示错误的系统。

干杯, 凯瑞

6 个答案:

答案 0 :(得分:1)

我理解你的问题,

我们在Message::listMessages();C

中使用这种方式C++

但我们在PHP中使用的正确语法是$message->listMessages();

感谢。

答案 1 :(得分:1)

我假设您的班级Message的定义如下:

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

它们相同,它们都从listMessages调用静态方法Message,但$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

答案 2 :(得分:1)

这是一个静态方法,即上的方法:

Message::listMessages();

这是调用实例方法,即对象上的方法(也就是类的实例):

$message->listMessages();

答案 3 :(得分:1)

Message :: listMessages()是一个静态函数,所以当listMessages()忽略你是对象的时候应该使用它,即。返回一些类常量或变量或...你喜欢的任何东西。 (static表示它应该对Message类的所有实例具有相同的输出)

$ message-&gt; listMessages()可能会使用您的对象propretyes,因此对于具有不同propretyes的同一Message类的两个不同对象(例如$ messages和$ messages1),输出可能不同。

答案 4 :(得分:1)

当我们想要分享时,静态方法会派上用场 类的对象之间的信息,或者想表示某些东西 这与班级本身有关,而与任何特定对象无关。

两者之间的区别在于它们被调用的方式。 例如,Message::listmessages()是一个静态方法,可以像这样调用:

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

您不需要先创建Message类的对象,以便使用上面的内容。另请注意,如果要在明确的预配置变量上返回结果,并且不基于类Message

的属性,则应使用此方法。

但是,$message->listmessages()是一个实例方法,可以像这样调用:

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

当您想要在类Message的运行时属性上调用函数时,这用于通用场景。

答案 5 :(得分:0)

Message正在调用自己的方法而没有对象意味着该方法是静态的,没有对象有权调用此方法,只有类可以调用。

Message::listMessages(); 

Message的对象正在调用公共方法

$message->listMessages();