无法从数组中的类访问静态成员变量

时间:2016-05-04 11:22:46

标签: php class oop static member

我正在尝试访问数组中的静态类成员变量。

我的代码(index.php):

<?php

class Foo
{
    public static $staticVar = 'test';
}

class Bar
{
    public $someArray = array(
        Foo::$staticVar
    );
}

$cls = new Bar();

var_dump($cls->someArray);

?>

在PHP-7.0上,我收到此错误:

  

PHP致命错误:常量表达式包含无效操作   第12行的/var/www/html/index.php

在PHP-5.6上我收到此错误:

  

PHP Parse错误:语法错误,意外的'$ staticVar'(T_VARIABLE),   期待标识符(T_STRING)或类(T_CLASS)   第11行的/var/www/html/index.php

我只想在我的数组中输入字符串“test”。

奇怪的是,当我'回显'变量时,它按预期工作:

echo Foo::$staticVar // prints 'test'

我是PHP的新手,我无法弄清楚我做错了什么。

1 个答案:

答案 0 :(得分:2)

不幸的是,您无法在类属性的初始声明中引用另一个变量或类。它只是语言的限制。一般的解决方法是在构造函数中初始化属性,例如

class Bar
{
    public $someArray = array();

    public function __construct()
    {
        $this->someArray = array(
            Foo::$staticVar
        );
    }
}

在一个含糊不清的相关说明中,PHP 5.6至少在允许您将常量定义为基本表达式方面取得了一些模糊的进展,请参阅https://3v4l.org/6TDZV