В частности, нельзя повторно использовать переменную, переданную по ссылке, потому что это влияет на $array, как в этом примере:
Код: Выделить всё
$array = ['test'];
foreach ($array as &$item){
$item = $item;
}
$item = 'modified';
var_dump($array);
array(1) {
[0]=>
&string(8) «модифицировано»
А вот это меня укусило: содержимое массива изменяется внутри функции must_not_modify, хотя я не передавайте $array значение.
Код: Выделить всё
function should_not_modify($array){
foreach($array as &$item){
$item = 'modified';
}
}
$array = ['test'];
foreach ($array as &$item){
$item = (string)$item;
}
should_not_modify($array);
var_dump($array);
array(1) {
[0]=>
&string(8) «модифицировано»
Мне хочется просмотреть всю мою кодовую базу и вставить unset($item); после каждого foreach ($массив => &$item).
Но, поскольку это большая задача и вводит потенциально бесполезную строку, я хотел бы знать, есть ли простое правило чтобы узнать, когда foreach($array => &$item) безопасен без unset($item); после него, а когда нет.
Изменить для уточнения
Думаю, я понимаю, что происходит и почему. Я также знаю, что лучше всего делать: foreach($array as &$item){...};unset($item);
Я знаю, что это опасно после foreach($array as &$item):
- повторно использовать переменную $item
- передать массив в функцию
Подробнее здесь: https://stackoverflow.com/questions/481 ... -dangerous
Мобильная версия