使用静态类数组声明多维静态PHP类数组时出错

使用静态类数组声明多维静态PHP类数组时出错,php,oop,static,multidimensional-array,Php,Oop,Static,Multidimensional Array,我正在刷新我的PHP知识,但有一个问题我自己无法解决: 我有一个包含两个私有静态数组的类,我想将它们存储为另一个(多维)静态类数组的值,但我总是得到一个*意外的T_变量*错误。下面是我的简化示例代码(仅使用一个而不是两个静态数组来填充以下多维数组),但失败了: class MyClass { private static $firstArr = array('a' => 'A', 'b' => 'B'); private static $multiArr = array('

我正在刷新我的PHP知识,但有一个问题我自己无法解决:

我有一个包含两个私有静态数组的类,我想将它们存储为另一个(多维)静态类数组的值,但我总是得到一个*意外的T_变量*错误。下面是我的简化示例代码(仅使用一个而不是两个静态数组来填充以下多维数组),但失败了:

class MyClass {
  private static $firstArr = array('a' => 'A', 'b' => 'B');

  private static $multiArr = array('a' => self::$firstArr);
}
我真的不明白这里怎么了。我可以很容易地用$firstArr本身的数组声明替换self::$firstArr,但无论如何,我想知道我在这里做错了什么

因此,欢迎发表任何评论

干杯,
Roman。

在声明类属性时,不能执行任何类型的额外计算

private static $multiArr = array('a' => self::$firstArr);
//                Can't do this    -----^

该声明可能包含一个初始化,但该初始化必须是一个常量值——也就是说,它必须能够在编译时进行计算,并且必须不依赖于运行时信息才能进行计算


避免复制/粘贴是正确的——这种“运行时信息”通常在构造函数中完成

我明白了,听起来很公平。谢谢你的解释,我还不知道(这可能意味着我正在做的事情应该以不同的方式完成…)。是的,这有点烦人,当你需要从静态属性计算表达式时,你需要将它们放在一个静态init方法中,你可以从类文件本身调用它,或者找到另一种设计@迈克B你是怎么做到的?