私はこれをしたい:
class MyClass {
var $array1 = array(3,4);
var $array2 = self::$array1;
}
動作し$array2
ません。
クラスプロパティを別のクラスプロパティと等しくするための解決策/トリックはありますか?
私はこれをしたい:
class MyClass {
var $array1 = array(3,4);
var $array2 = self::$array1;
}
動作し$array2
ません。
クラスプロパティを別のクラスプロパティと等しくするための解決策/トリックはありますか?
によるとPHP Manual
:
デフォルト値は、変数、クラス メンバー、関数呼び出しなどではなく、定数式でなければなりません。
あなたができることは次のとおりです。
class MyClass {
var $array1 = array(3,4);
var $array2 = array();
function MyClass() {
$this->array2 = $this->array1;
}
}
関数MyClass
(または__construct
PHP5 を使用している場合) は、新しいオブジェクトが作成されるたびに呼び出されるため、 のインスタンスにMyClass
はarray2
、そのプロパティと同じ値を持つプロパティがありarray1
ます。
$myclass = new MyClass();
print_r($myclass->array1); // outputs Array ( [0] => 3 [1] => 4 )
print_r($myclass->array2); // outputs Array ( [0] => 3 [1] => 4 )
私は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 )
参照を追加すると、どちらかが変更されると、両方のクラス プロパティ値が変更されます。何か不足していますか?
Paolo と notruthless のどちらの回答も素晴らしいです。どうもありがとうございました。
2 つのプロパティを同期させたい場合:
function MyClass() {
$this->array2 = &$this->array1;
}
2 つの配列を最初は同じ値にしたいが、後で個別に変更したい場合は、「&」を削除します。
function MyClass() {
$this->array2 = $this->array1;
}