PHP:扩展静态成员数组

tst*_*ner 2 php inheritance static-members

我有以下情况:

class A { public static $arr=array(1,2); }
class B extends A { public static $arr=array(3,4); }
Run Code Online (Sandbox Code Playgroud)

有没有什么办法,以这2个阵,因此结合B::$arrIS 1,2,3,4

我不需要改变这些数组,但我不能声明它们是als const,因为PHP不允许使用const数组./sf/ PHP手册指出,我只能分配字符串和常量,因此parent::$arr + array(1,2)不起作用,但我认为应该可以这样做.

Chr*_*ris 5

你是对的,你只能在声明一个静态变量时指定文字和常量.解决方法是在声明类之后立即在代码中赋值.在Java中,您可以使用静态初始化器很好地完成此操作,但PHP也不支持这些,因此我们必须自己定义并调用方法:

class A { public static $arr=array(1,2); }
class B extends A {
  public static $arr;
  public static function init() {
    self::$arr = array_merge(parent::$arr, array(3,4));
  }
}; B::init();
Run Code Online (Sandbox Code Playgroud)

还要注意使用array_merge而不是union(+)运算符 - union运算符不会像你想要的那样组合数组,因为它们具有相同的数字键 - 第一个是array(0=>1, 1=>2),第二个是array(0=>3, 1=>4); 它们的联合只会包含每个键一次,所以你要么最终(1,2)还是要(3,4)依赖你的联合顺序.