PHP中的对象无法访问的类中的静态属性

时间:2013-01-11 05:24:04

标签: php

class Foo
{
    public static $my_static = 'foo';

    public static function staticValue() {
        return self::$my_static;
    }
}


$foo = new Foo();
print $foo->staticValue() . "\n";
print $foo->my_static . "\n"; 

为什么在使用PHP中的对象访问静态资源时无法访问静态属性。只能使用“::”访问。

2 个答案:

答案 0 :(得分:1)

因为你有两个“范围”,一个是“对象”,一个是每个类中的“静态”。 因此,您希望在静态方法中执行常规方法时出现同样的问题。 例如:

class foo {
 public function bar() {
  echo "bar";
 } 

 public static function bar2() {
   echo $this->bar();
 }
}

$foo = new foo();
$foo->bar2();

这是因为您处于静态上下文中,并且无法从该处访问对象上下文。 我想,更多的是不能说这个。 看到它就像你有一个住在其中的2个家庭的房子,它们之间的门永远不会打开。 你有一个全局的房子,它是一个类,然后是一个家庭1,它是对象范围,最后是家庭2,它是静态范围。

也许这有帮助。

答案 1 :(得分:0)

您需要使用范围解析运算符::

来访问它
echo  $foo::my_static . "\n";