Вы правы, вы можете назначать литералы и константы только при объявлении статической переменной. Обходным решением будет присвоить значение в коде сразу после объявления класса. В 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)
в зависимости от порядка их объединения.