0

私のコードの問題を説明しましょう。これは機能します:

$multiarray = array(
    'multikey1' => '',
    'multikey2' => ''
);
$array = array(
    'key1' => '',
    'key2' => '',
    'key3' => '',
    'key4' => $multiarray 
);
print_r($array);

これは動作しません:

class Array {

    public static $multiarray = array(
        'multikey1' => '',
        'multikey2' => '',
        'multikey3' => ''
    );

    public $array = array(
        'key1' => '',
        'key2' => self::$multiarray
    );
}

$array = new Array;

残念ながら、これは機能しません。これを解決する方法はありますか?

4

1 に答える 1

1

メンバー変数を定数ではないものに初期化することはできず、別の配列をメンバー変数として含めようとしていますが、これにはランタイム実行が必要です。

また、配列の作成に使用されるArray予約語と競合するため、クラス名は無効であることに注意してください。array

マニュアルから:

この宣言には初期化が含まれる場合がありますが、この初期化は定数値である必要があります。つまり、コンパイル時に評価できる必要があり、評価されるために実行時の情報に依存してはなりません。

回避策は、コンストラクターで変数を設定することです。

class Array2 {
    public static $multiarray = array(
        'multikey1' =>  '',
        'multikey2' =>  '',
        'multikey3' =>  ''
    );

    public $array;

    function __construct() {
        $this->array = array(
            'key1'  =>  '',
            'key2'  =>  self::$multiarray
        );
    }
}
于 2012-12-13T18:10:52.743 に答える