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


Cannot access static member variable from class in array

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

我的代码(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分析错误:语法错误,意外的'$staticVar'(T_VARIABLE),中应包含标识符(T_STRING)或类(T_class)/第11行上的var/www/html/index.php

我只想在我的数组中有字符串"test"。

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

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

我是PHP的新手,我不知道自己做错了什么。

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

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

在一个模糊相关的注释中,PHP5.6至少在允许您将常量定义为基本表达式方面取得了一些模糊的进展,请参见https://3v4l.org/6TDZV