2013-08-08 6 views
1

Почему PHP создает новый массив при нажатии элемента?PHP создает новый экземпляр при нажатии элемента

$a = array(); 
$b = $a; 

$b[] = "Hello!"; 
echo count($a); 
echo count($b); 

Здесь вы ожидаете, что счетчик для $ a и $ b будет равен, но это не так.

+0

Они не равны, так как $ a пуст и $ b имеет 1 значение. – shark

+1

что здесь неожиданно? Я не вижу ничего плохого –

+0

На подавляющем большинстве популярных языков программирования присвоения объекта, подобного массиву, были бы ссылкой. –

ответ

3

По умолчанию PHP копирует значения при их назначении. Если вы хотите ссылку, вы можете использовать & operator:

$a = array(); 
$b = &$a; 

$b[] = "Hello!"; 
echo count($a); // prints 1 
echo count($b); // prints 1 
+0

@CORRUPT согласился, поэтому я добавил цитаты. Я обновлю свой ответ, чтобы избежать путаницы. –

0

Это потому, что $a и $b две отдельные переменные, при назначении $b = $a вы только копирование содержимого $a в $b, не делая их как точки к тому же массиву.

Для этого вам необходимо пройти по ссылкам вместо:

$b = &$a; 

В этом случае $ б указывает ссылки на $ а, значит, они указывают на один и тот же массив, любое изменение один изменится на обоих.

Смежные вопросы