从类实例访问静态变量

时间:2017-03-09 21:33:36

标签: php

我想使用这行代码:

$this->ClassInstance::$StaticVariable;

这是基本设置:

Class foo{
   public static $StaticVariable;
}

$this->ClassInstance = new foo();

这是解析错误背后的原因是什么?

当这个:

$ClassInstance = $this->ClassInstance;
$ClassInstance::$StaticVariable;

完全有效。

3 个答案:

答案 0 :(得分:3)

假设你的意思

Class Foo{
    public static $StaticVariable = 42;
}

class Bar {
    private $ClassInstance;

    public function fn() {
        $this->ClassInstance = new Foo();
        return $this->ClassInstance::$StaticVariable;
    }
}

$bar = new Bar;
echo $bar->fn();

然后this works as of PHP7。在此之前,解析器可能根本不能解除引用。有关详细信息,请参阅wiki page linked in the comments to your question

你可以使用get_class($this->ClassInstance)::$StaticVariable;

答案 1 :(得分:2)

在PHP文档中

  

将类属性或方法声明为静态使它们可以访问,而无需实例化类。声明为static的属性无法使用实例化的类对象访问(尽管静态方法可以)。

来源http://php.net/manual/en/language.oop5.static.php

答案 2 :(得分:2)

您可以使用self::$staticVariablefoo::$staticVariable访问它。无需使用该实例。