4

私はこれをしたい:

class MyClass {
   var $array1 = array(3,4);
   var $array2 = self::$array1;
}

動作し$array2ません。

クラスプロパティを別のクラスプロパティと等しくするための解決策/トリックはありますか?

4

3 に答える 3

6

によるとPHP Manual

デフォルト値は、変数、クラス メンバー、関数呼び出しなどではなく、定数式でなければなりません。

あなたができることは次のとおりです。

class MyClass {
    var $array1 = array(3,4);
    var $array2 = array();

    function MyClass() {
        $this->array2 = $this->array1;
    }
}

関数MyClass(または__constructPHP5 を使用している場合) は、新しいオブジェクトが作成されるたびに呼び出されるため、 のインスタンスにMyClassarray2、そのプロパティと同じ値を持つプロパティがありarray1ます。

$myclass = new MyClass();
print_r($myclass->array1); // outputs Array ( [0] => 3 [1] => 4 ) 
print_r($myclass->array2); // outputs Array ( [0] => 3 [1] => 4 ) 
于 2009-01-25T02:32:17.373 に答える
3

私はPHPが初めてですが、Paoloからの答えは、コンストラクターでを同じになるように初期化しているようですが、実際には両方の変数が同じコンテンツを参照するわけではありません。これはどう:

class MyClass {
    var $array1 = array(3,4);
    var $array2 = array();

    function MyClass() {
        $this->array2 = &$this->array1;
    }
}

$myclass = new MyClass();
print_r($myclass->array1); // outputs Array ( [0] => 3 [1] => 4 ) 
print_r($myclass->array2); // outputs Array ( [0] => 3 [1] => 4 )
echo "<br />";
$myclass->array1[0] = 1;
$myclass->array2[1] = 2;
print_r($myclass->array1); // outputs Array ( [0] => 1 [1] => 2 ) 
print_r($myclass->array2); // outputs Array ( [0] => 1 [1] => 2 )

参照を追加すると、どちらかが変更されると、両方のクラス プロパティ値が変更されます。何か不足していますか?

于 2009-01-25T03:06:34.683 に答える
0

Paolo と notruthless のどちらの回答も素晴らしいです。どうもありがとうございました。

2 つのプロパティを同期させたい場合:

function MyClass() {
    $this->array2 = &$this->array1;
}

2 つの配列を最初は同じ値にしたいが、後で個別に変更したい場合は、「&」を削除します。

function MyClass() {
    $this->array2 = $this->array1;
}
于 2009-01-25T05:38:05.907 に答える