为什么静态属性无法通过 - >访问但静态功能可访问?

时间:2015-01-13 13:22:57

标签: php class oop static static-methods

我有以下代码

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

----------------
  1. 我通过创建对象(使用 - &gt;)和范围解析运算符(使用::)来访问静态方法 但是当我尝试通过范围解析使用静态属性时(使用::)它显示通知不起作用。下面是附加代码。

    $ obj-&GT;计数; //注意:未定义的属性:MyClass :: $ count

  2. 我通过创建对象(使用 - &gt;)和范围解析运算符(使用:)来访问静态方法但仍然静态属性计数增加为什么?

  3. 为什么不同的静态属性访问规则(only ::)和方法(by - &gt;,::)?

1 个答案:

答案 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()而无需实例化它,因为你知道这是一个静态方法。

静态变量在声明时始终是静态的。实例上没有数据 - 因此,当您更新它时使用的范围,它将更新静态计数。