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

标签 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 Fatal error: Constant expression contains invalid operations in /var/www/html/index.php on line 12

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

PHP Parse error: syntax error, unexpected '$staticVar' (T_VARIABLE), expecting identifier (T_STRING) or class (T_CLASS) in /var/www/html/index.php on line 11

我只想在数组中包含字符串“test”。

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

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

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

最佳答案

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

class Bar
{
    public $someArray = array();

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

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

关于php - 无法从数组中的类访问静态成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37026387/

相关文章:

javascript - 创建提交按钮返回数据的javascript函数

C++ 意外数字输出

ios - Swift:在 ViewController 的初始化例程中使用数据模型类结构

c++ - 如何组织游戏引擎

c++ - 重载运算符 C++,复数?

c# - list 上应该包含哪些内容可以帮助开发优秀的 OO 软件?

php: 在 catch() 中重复函数调用 2-3 次

php - 旋转图像降低质量

PHP 在比较数组值时忽略大小写敏感

c++ - C++ 字符串类可以进行指针运算吗?