这是我上一个问题的延续 - 但我认为它的独特性足以保证一个新问题。
有什么区别:
Message::listMessages();
和
$message->listMessages();
我正在创建一个迷你cms,我想要一个以统一方式显示错误的系统。
干杯, 凯瑞
答案 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();