【发布时间】:2011-11-23 09:09:33
【问题描述】:
在 PHP 中,使用箭头 -> 和范围解析运算符 :: 在类中调用 function() 的主要区别是什么?
更多清关,区别:
$name = $foo->getName();
$name = $foo::getName();
Scope Resolution Operator :: 的主要利润是什么?
【问题讨论】:
在 PHP 中,使用箭头 -> 和范围解析运算符 :: 在类中调用 function() 的主要区别是什么?
更多清关,区别:
$name = $foo->getName();
$name = $foo::getName();
Scope Resolution Operator :: 的主要利润是什么?
【问题讨论】:
$name = $foo->getName();
这将调用对象$foo的成员或静态函数,而
$name = $foo::getName();
将调用$foo 类的静态函数。如果你想这样称呼它,使用:: 的“利润”是能够访问类的静态成员,而无需此类的对象实例。也就是说,
$name = ClassOfFoo::getName();
【讨论】:
:: 可以被static 班级成员访问???哇!这么多利润! :D 谢谢哥们,K-ballo
:: 可以访问static 会员,那么static 有什么好处呢??我认为这只是 PHP 中的一种非结构化方式 :(
static 与其他东西混淆了,在所有语言中都有访问类的静态(公共)成员的方法。
【讨论】:
它们用于不同的函数类型。 -> 始终用于静态和非静态方法的对象(尽管我认为将 -> 用于静态方法并不是一个好习惯)。 :: 仅用于静态方法,可用于对象(自 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 允许???伙计,我对-> 感到困惑。你确定-> 是允许的吗?