Может ли свойство класса PHP быть равно другому свойству класса? - PullRequest
3 голосов
/ 25 января 2009

Я хочу сделать это:

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

и $array2 не работает.

Есть ли у вас решение / хитрость, чтобы сделать свойство класса равным другому свойству класса?

Ответы [ 3 ]

5 голосов
/ 25 января 2009

Согласно 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 ) 
3 голосов
/ 25 января 2009

Я новичок в 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 )

С добавлением ссылки оба значения свойства класса изменяются при изменении любого из них. Я что-то упустил?

0 голосов
/ 25 января 2009

Оба ваших ответа, Паоло и безжалостный, превосходны, большое спасибо!

Если я хочу синхронизировать два свойства:

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

Если я хочу, чтобы два массива изначально имели одинаковые значения, но затем хочу изменить их по отдельности, я удаляю '&':

function MyClass() {
    $this->array2 = $this->array1;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...