Вопрос про unset(), просьба разъяснить.

Статус
В этой теме нельзя размещать новые ответы.

Jarhead

Постоялец
Регистрация
17 Июн 2011
Сообщения
414
Реакции
169
Здравствуйте,

Прошу объяснить когда стоит использовать unset, а когда нет(или не имеет смысла). Мне приходится много программировать, я использую unset в своем коде, но нет понимания правильно ли я делаю и имеет ли это смысл.

Вот кусок, когда который я написал недавно:

PHP:
            foreach ($categoryes as $ck => &$cv) {
                $cat_id_lang = $cv['id_lang'];
                foreach ($languages as $clk => $clv) {
                    if($cat_id_lang == $clv['id_lang']){
                        $cv['iso_code'] = $clv['iso_code'];
                    }
                    unset($clv);
                }
                unset($cv,$cat_id_lang);
            }

Правильно ли я использовал unset?

И имеет ли смысл использовать unset после return в функции?
 
unset имеет смысл использовать, если переменную нужно использовать повторно или высвободить существенный объём памяти.
В Вашем случае unset не нужен.
Потому что PHP имеет сборщик мусора и заботиться об освобождении памяти, занятой всеми переменными, здесь не нужно.

Тут ещё вопрос:
PHP:
 ($categoryes as $ck => &$cv)
В этом коде не понял, зачем там ссылка на переменную вместо самой переменной?
Имхо легко запутаться.
И наверно вместо categoryes хотели написать categories
 
Последнее редактирование:
Unset в данном коде ИМХО лишний (собственно, это легко проверить - удалить его и код будет нормально работать наверняка).
Иногда использую unset для того, чтобы какой-то элемент массива удалить.

Тут ещё вопрос:
PHP:
 ($categoryes as $ck => &$cv)
В этом коде не понял, зачем там ссылка на переменную вместо самой переменной?

дальше по коду значение $cv изменяется.
 
unset для всех 3х переменных лишний и скорее всего повысит нагрузку на проц.

Логично было бы им воспользоваться после этих 2х циклов foreach освободив все временные переменные:
PHP:
unset($ck, $cv, $cat_id_lang, $clk, $clv);
Но смысла в этом не очень много и можно не заморачиваться, а если это всё внутри функции то тем более с лёгкой душой можно забить.

И имеет ли смысл использовать unset после return в функции?
Весь код внутри функции после return будет проигнорирован. "Снаружи" функции об этих переменных ничего не будет известно, если не было объявлен global для них. Т.е. unset тоже бесполезен.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху