2015-12-12 2 views

ответ

1

Потому что $array не существует до окончания вашей декларации. Вы просто не можете определить массив таким рекурсивным образом, поскольку ссылаетесь на несуществующий ресурс.


Это рабочий вариант. В самом деле, не очень удобно, но рабочая:

<?php 
$array = [ 
    'one' => 1, 
    'two' => 2 
]; 
$array['three'] = $array['one'] + $array['two']; 

var_dump($array); 

Выход очевидно:

array(3) { 
    'one' => 
    int(1) 
    'two' => 
    int(2) 
    'three' => 
    int(3) 
} 

Единственный действительно элегантный способ обойти это требует довольно много усилий:

Вы можете реализовать a класс, реализующий интерфейс ArrayAccess. Это позволяет вам реализовать, как свойства должны быть определены внутренне (например, эта сумма), сохраняя при этом доступ к этим свойствам через нотацию массива. Поэтому никакой разницы в массиве во время выполнения, только при настройке объекта. Однако это такое огромное усилие, что я сомневаюсь, что это стоит того> 99% случаев.

0

Вы используете переменную, которая объявляется, ее значение значения еще не известно. Вот как вы должны это написать:

$array = array(
'one' => 1, 
'two' => 2, 
); 
$array['tree'] = $array['one'] + $array['two']; 
Смежные вопросы