PHP:扩展静态成员数组

标签 php inheritance static-members

我遇到以下情况:

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) 不起作用,但我认为应该可以做到这一点。

最佳答案

你是对的,声明静态变量时只能分配文字和常量。解决方法是在声明类后立即在代码中分配值。在 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();

另请注意使用 array_merge 而不是并集 (+) 运算符 - 并集运算符不会按照您的预期组合数组,因为它们具有相同的数值键 - 第一个是 array(0=>1, 1=>2),第二个是 array(0=>3, 1=>4);它们的并集只会包含每个键一次,因此您最终会得到 (1,2)(3,4) ,具体取决于您联合的顺序他们。

关于PHP:扩展静态成员数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2892911/

相关文章:

c++ - 为什么在类中初始化的非整数静态数据成员必须是 constexpr?

php - 自动幻灯片制作器

php - APE服务器: How to configure SSL?

java - Volley 库在发布请求时给出错误 500

c++ - 在构造函数中使用对象

java - 继承和调用方法(实例与非实例)

c++ - cartTexture 成员实际上是否正确初始化?

c++ - 使用模板参数初始化静态常量成员

php - 以 json 对象形式传递时间戳值以填充流程图

python - 从 Python List 继承后覆盖追加方法