[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Делаете ли вы unset после foreach.
Страницы: 1, 2
GET
Привет навеяно этой темой http://phpforum.ru/index.php?showtopic=78815&hl=
Дальше, просто интересно.

Итак, вы делаете проект, в нем, за один проход, возможно многократно встречаются циклы foreach.

Вопрос:
Удаляете ли вы после каждого foreach промежуточную переменную $val, чтобы случайно вы или кто-то (другой программист) не использовал эту переменную случайно в будущем?

$test = array(1,2,3,4,5);
foreach ($test as $val)echo $val;
unset($val);//удалю-ка на всякий случай, делаете так???


user posted image

Спасибо.

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
bestxp
после foreach да всегда, причем обе, привычка

в остальных редко.
GET
Я в таких случаях делаю unset только для тяжелых переменных (типа ассоциативных массивов со строками), ну и там где это обусловлено логикой конечно.

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
twin
Цитата (ABC @ 11.01.2014 - 10:55)
Я в таких случаях делаю unset только для тяжелых переменных (типа ассоциативных массивов со строками), ну и там где это обусловлено логикой конечно.

Тогда вопрос поставлен не совсем корректно...
Я слабо представляю себе массив, в котором элементами ассоциативные массивы таким размером, что это может существенно повлиять на расход памяти. Представляю... Но слабо. :)

Тогда нужно было потавить вопрос о всех переменных, а не о промежуточных. Они обычно перезаписываются, а не копятся.

Другое дело, когда есть опасение использования переменной в дальнейшем. Но обычно, если предполагается её использование с начальным значением (конкатенация к примеру), гораздо логичнее обнулить её перед использованием. Это куда надежнее и прозрачнее, чем надеяться на силу привычки, как делает bestxp

$test = array(1,2,3,4,5);
foreach($test as $val)echo $val;echo $val;
.
.
.

$val = '';
foreach($test as $value)
$val .= $value;



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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
GET
Ну, я думаю никто не пытается сказать, что кто-то глуп или самонадеян. В конце концов на то нам и даны мозги, чтоб знать что, где и когда применять. Это и есть сущность программирования, это и есть основа любого языка.

Всем нам приятного вечера, друзья. biggrin.gif

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
linker
Если это функция, то ничего не делаю, потому что после return всё и так уничтожается.

_____________
Gear Framework
Gear Framework на Github
Valick
вот прям даже незнаю, тема реально создана поржать или как?
удалять эту переменную просто так на всякий случай - это сюжет достойный башорга...
Цитата
чтобы случайно вы или кто-то (другой программист) не использовал эту переменную случайно в будущем

вряд ли этого человека можно назвать программистом, скорее говнокодером...
Цитата
Я в таких случаях делаю unset только для тяжелых переменных (типа ассоциативных массивов со строками), ну и там где это обусловлено логикой конечно.

в этом есть хоть какая-то логика, да и то если после этого цикла еще "полкило" кода
___
это все равно, что шубу в кредит покупать biggrin.gif

_____________
Стимулятор ~yoomoney - 41001303250491
linker
Valick
Иногда unset() приходится делать, потому что в режиме "демона" и активной работы скрипты любят нажираться и падать. Особенно php любит объекты, которые сложно удалить, пока существуют на них ссылки.

_____________
Gear Framework
Gear Framework на Github
Valick
Цитата
в режиме "демона" и активной работы скрипты любят нажираться и падать

это уже проблемы логики программиста, и жирности сервера
ну никак не неубитой переменной, даже если там "война и мир" целиком, скрипт (и сервер) должен быть расчитан на обработку таких данных
а то как из базы в промежуточный массив загонять, да еще и не один, а свой массив под каждый запрос это нас мёдом не корми, или в опреративку грузить файлы по 10 метров целиком
а тут промежуточная переменная "глаза колит", хотя у хорошего прграммиста они не размножаются половым путем, делением, почкованием и черенками...
я не спорю, что иногда логика скрипта заставляет это делать, но это скоее исключение чем правило.

linker, я не имею ввиду именно вас.

_____________
Стимулятор ~yoomoney - 41001303250491
linker
Valick
Цитата
я не спорю, что иногда логика скрипта заставляет это делать

Ну я как бы про этот случай и говорю.

_____________
Gear Framework
Gear Framework на Github
linker
Valick
А, ну ещё и в этом случае тоже
foreach($arr as &$value) {}
unset($value);


_____________
Gear Framework
Gear Framework на Github
killer8080
Не голосовал, потому что нет правильного варианта в опросе.

unset после foreach нужен только в одном случае, при передаче по ссылке, в остальных случаях, это как дуть на воду, или крестится после грома. Плохого коненчно ничего не случится, но и смысла ноль smile.gif



Спустя 46 секунд killer8080 написал(а):
линкер опередил rolleyes.gif
inpost
ABC
Делал пару раз, когда сервер падал и хотелось даже на спичках вытянуть, так как дальше оптимизировать уже было нечего. В итоге всё решилось сменой сервера и найма нормального сис.админа.
А по поводу использования переменной в дальнейшем, то я пишу так:
foreach($array as $k=>$v). Именно $k и $v, такие имена только у foreach, значит никто ими пользоваться и не будет. Аналогично как $i для счётчика, $t - для времени работы. Не думаю, что кому-то вдруг понадобится создавать 1-символьные переменные для чего-то ВАЖНОГО smile.gif

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
killer8080
ABC
вот накидал тест кейс
$arr = array(1,2,3,4,5,6,7,8,9); 
$arr2 = array(1,2,3,4,5,6,7,8,9);

foreach ($arr as &$v) {
$v += 2;
}

unset($v);

foreach ($arr2 as $k => $v) {
$arr2[$k] += 2;
}

echo '<pre>'.print_r($arr, 1).'</pre>';
echo '<pre>'.print_r($arr2, 1).'</pre>';

запусти, посмотри результат, потом закомментируй unset и сравни результат.
:)
Aeq
плюсую за вариант с &. если без ссылки то смысла нет, а вот со ссылкой без unset много раз встречал как от этого возникают весьма своеобразные косяки ))))
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.