【发布时间】:2015-01-13 13:22:56
【问题描述】:
我有以下代码
class MyClass
{
public static $count = 0;
public static function plusOne()
{
return "The count is " . ++self::$count . ".<br />";
}
}
$obj = new MyClass;
$obj->plusOne(); //Works proper for static function
echo '<br/>'.MyClass::$count; // count: 1
MyClass::plusOne(); //Works proper for static function
echo '<br/>'.MyClass::$count; // count: 2
----OUTPUT------
1
2
----------------
-
我可以通过创建对象(使用 ->)和范围解析运算符(使用 ::)访问静态方法 方法正常工作 但是当我尝试通过范围分辨率使用静态属性时(使用 :: )它显示通知不起作用。下面是附加代码。
$obj->计数; // 注意:未定义的属性:MyClass::$count
我可以通过创建对象(使用 ->)和范围解析运算符(使用 ::)访问静态方法,但静态属性计数仍然增加,为什么?
为什么静态属性(仅 :: )和方法(by ->, ::)的访问规则不同?
【问题讨论】:
-
当您将类实例化为对象时,您可以使用
->。::是当您想通过static调用某些东西时。你不能访问->$count,因为那是一个类成员,当你没有实例化的时候你可以通过::访问。 -
@lolka_bolka:谢谢。在第二季度,我使用了不同的方法 2(即 ->、 :: ),但最后计数增加了。我第一次使用 $obj->plusOne() 和第二次直接使用 MyClass::plusOne() 有什么想法吗?
-
@Darhazer:谢谢。我通过你的链接得到了我的 Q1 答案。您能否帮我解决 Q2 如何/为什么会发生?
-
正如@lolka_bolka 指出的那样,使用名称
->并不意味着它必须是一个非静态方法,它必须是一个在类中定义的方法从中实例化一个对象。
标签: php class oop static static-methods