2

我有以下情况:

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

有什么方法可以将这两个数组组合起来B::$arr1,2,3,4

我不需要更改这些数组,但我不能将它们声明为 const,因为 PHP 不允许 const 数组。https://stackoverflow.com/questions/ask PHP 手册指出,我只能分配字符串和常量,所以parent::$arr + array(1,2)不起作用,但我认为应该可以做到这一点。

4

2 回答 2

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();

还要注意使用 ofarray_merge而不是 union ( +) 运算符 - union 运算符不会按照您的意愿组合数组,因为它们具有相同的数字键 - 第一个是array(0=>1, 1=>2),第二个是array(0=>3, 1=>4); 它们的联合只会包含每个密钥一次,因此您最终会得到(1,2)(3,4)取决于联合它们的顺序。

于 2010-05-23T18:41:22.047 回答
1

是的,您只需要花点心思,因为您将无法定义静态变量。

<?php

class A 
{
    public static $arr = array(1, 2);
    public static function getArr(){ return self::$arr; }
}

class B extends A 
{
    public static $arr = array(3, 4);
    public static function getArr(){ return array_merge(parent::$arr, self::$arr); }
}


print_r( A::getArr() );
print_r( B::getArr() );

输出:

Array
(
    [0] => 1
    [1] => 2
)
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
)

也很好,因为您也可以访问原始数组:

print_r( A::$arr );
print_r( B::$arr );

Array
(
    [0] => 1
    [1] => 2
)
Array
(
    [0] => 3
    [1] => 4
)
于 2010-05-23T18:45:06.067 回答