可能重复:
在PHP中,::和->有什么区别?
在PHP中,使用箭头->
和作用域解析运算符::
调用类内部的函数时主要区别是什么?
为了更清晰地说明,下面是两种方式的区别:
$name = $foo->getName();
$name = $foo::getName();
作用域解析运算符::
的主要优点是什么?
可能重复:
在PHP中,::和->有什么区别?
在PHP中,使用箭头->
和作用域解析运算符::
调用类内部的函数时主要区别是什么?
为了更清晰地说明,下面是两种方式的区别:
$name = $foo->getName();
$name = $foo::getName();
作用域解析运算符::
的主要优点是什么?
$name = $foo->getName();
这将调用对象$foo
的成员函数或静态函数。
$name = $foo::getName();
将调用$foo
所在类的静态函数。使用::
的好处是可以访问一个类的静态成员,而不需要该类的对象实例。也就是说,
$name = ClassOfFoo::getName();
->
总是用于静态和非静态方法的对象(虽然我认为对于静态方法使用->
不是一个好习惯)。::
仅用于静态方法,并且可以用于对象(自PHP 5.3起)更重要的是类。<?php
class aClass {
static function aStaticMethod() {}
function aNormalMethod() {}
}
$obj = new aClass();
$obj->aNormalMethod(); //allowed
$obj->aStaticMethod(); //allowed
$obj::aStaticMethod(); //allowed as of PHP 5.3
$class_name = get_class( $obj );
$class_name::aStaticMethod(); //long hand for $obj::aStaticMethod()
aClass::aStaticMethod(); //allowed
//aClass::aNormalMethod(); //not allowed
//aClass->aStaticMethod(); //not allowed
//aClass->aNormalMethod(); //not allowed
$obj->aStaticMethod(); //allowed
允许的????伙计,我对 ->
感到困惑。你确定它允许这样做吗? - 夏期劇場
static
成员???哇!够赚了!:D 谢谢伙计,K-ballo - 夏期劇場::
可以访问static
成员,那么static
的美在哪里?我认为这只是PHP中一种不太结构化的方式 :( - 夏期劇場static
与其他东西混淆了,在所有的编程语言中,都有办法访问一个类的静态(public)成员。 - K-ballo