2

私は次のシナリオを持っています:

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

これらの2つのアレイを組み合わせる方法はありますB::$arr1,2,3,4

これらの配列を変更する必要はありませんが、PHPではconst配列が許可されていないため、これらの配列を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();

array_mergeまた、ユニオン ( ) 演算子の代わりに を使用することにも注意してください。+ユニオン演算子は、同じ数値キーを持っているため、意図したとおりに配列を結合しません。最初はarray(0=>1, 1=>2)、2 番目はarray(0=>3, 1=>4); です。それらの結合には各キーが1回しか含まれないため、それらを結合する順序で終わるか、それに応じて(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 に答える