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