Когда foreach с параметром по ссылке опасен?Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Когда foreach с параметром по ссылке опасен?

Сообщение Anonymous »

Я знал, что передавать элементы по ссылке в foreach может быть опасно.

В частности, нельзя повторно использовать переменную, переданную по ссылке, потому что это влияет на $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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»