0
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 中的对象访问。它只能使用 '::' 访问。

4

2 回答 2

1

因为您有 2 个“范围”,一个是“对象”,一个是每个类中的“静态”。因此,如果您想在静态方法中执行普通方法,也会出现同样的问题。例如:

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

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

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

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

也许这有帮助。

于 2013-01-11T10:13:18.247 回答
0

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

echo  $foo::my_static . "\n"; 
于 2013-01-11T06:15:49.250 回答