Элементы в массивах, это ссылки? - PullRequest
0 голосов
/ 22 марта 2011

посмотрите на код ниже:

$index = GetIndexForId($itemid);

$item = null;

if( $index == -1 )
{
    $item = array();
    $this->items[] = $item;
    $index = count($this->items)-1;
}
else
    $item = $this->items[$index];

$item['id'] = $itemid;
$item['qty'] = $qty;
$item['options'] = $options;

$this->items[$index] = $item; // This line is my question

Последняя строка, это нужно? Я действительно не знаю, как php обрабатывает присвоение массива.

P.S. GetIndexForId просто выполняет поиск, если текущий идентификатор уже существует в массиве, а другие «необъявленные» переменные являются параметрами.

Ответы [ 3 ]

3 голосов
/ 22 марта 2011

Из документации :

Назначение массива всегда включает копирование значения.Используйте оператор ссылки, чтобы скопировать массив по ссылке.

Так что да, учитывая ваш код, последняя строка необходима, но $this->items[] = $item; излишен.

1 голос
/ 22 марта 2011

Если вы хотите обновить свой объект, да, вам нужна эта последняя строка

0 голосов
/ 22 марта 2011

Любой тип значения, например, boolean, int ..., не будет передан по ссылке. Но если ваш массив заполнен объектами, он будет передан по ссылке. В вашем примере вам нужна последняя строка. Но, как я уже сказал, если бы $ item был объектом, вам не понадобилась бы последняя строка. Можно передать тип значения по ссылке с помощью оператора ссылки.

Узнайте, как использовать оператор ссылки ЗДЕСЬ

...