我有以下代码
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
----------------
我通过创建对象(使用 - &gt;)和范围解析运算符(使用::)来访问静态方法 但是当我尝试通过范围解析使用静态属性时(使用::)它显示通知不起作用。下面是附加代码。
$ obj-&GT;计数; //注意:未定义的属性:MyClass :: $ count
我通过创建对象(使用 - &gt;)和范围解析运算符(使用:)来访问静态方法但仍然静态属性计数增加为什么?
为什么不同的静态属性访问规则(only ::)和方法(by - &gt;,::)?
答案 0 :(得分:-1)
在你的例子中,它看起来很奇怪,但想象一下你是否还有
class MyOtherClass
{
public $count = 0;
public function plusOne()
{
return "The other count is " . ++$this->count . ".<br />";
}
}
现在,如果你想做
$obj->plusOne();
你可以这样做,无论$ obj是MyClass还是MyOtherClass,它都能正常工作。此时实施细节并不重要,除非您已经了解它们 - 例如。你可以使用MyClass :: plusOne()而无需实例化它,因为你知道这是一个静态方法。
静态变量在声明时始终是静态的。实例上没有数据 - 因此,当您更新它时使用的范围,它将更新静态计数。