Я хочу сделать это:
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 )
С добавлением ссылки оба значения свойств класса изменяются, когда они изменяются. Я что-то упускаю?
Оба ваших ответа, Паоло и безжалостный, отлично, спасибо вам большое!
Если я хочу, чтобы два свойства сохранялись в синхронизации:
function MyClass() { $this->array2 = &$this->array1; }
Если я хочу, чтобы два массива имели одинаковые значения изначально, но затем хотите изменить их индивидуально, я удаляю «&»:
function MyClass() { $this->array2 = $this->array1; }