Задать вопрос
ragnar_ok
@ragnar_ok

Нужно ли делать unset для переменной, полученной по ссылке?

Нужно ли делать unset для переменной, полученной по ссылке внутри foreach()? Код вырван из контекста.
Все переменные, которые переданы по ссылке, всегда нужно удалять. Верно? Если да, то как удалить переменную, которая передается внутри цикла:
$prop = &$arResult["PROPERTIES"][$pid]
unset() внутри цикла?

<?php
$arParams["PROPERTY_CODE"] = [
    0 => "city",
    1 => "cashbox",
    2 => "scanner"
];
$arResult["PROPERTIES"] = [
    "city" => 
        [
            "ID" => "0",
            "TIMESTAMP_X" => "2017-02-04 19:32:54"
        ],
    "cashbox" => 
        [
            "ID" => "1",
            "TIMESTAMP_X" => "2018-02-04 19:32:54"
        ],
    "scanner" => 
        [
            "ID" => "2",
            "TIMESTAMP_X" => "2019-02-04 19:32:54"
        ],
];

foreach($arParams["PROPERTY_CODE"] as &$pid)
{
    $prop = &$arResult["PROPERTIES"][$pid]; 
    var_dump($prop);
}
unset($pid); //нужно ли делать unset($arResult["PROPERTIES"][$pid])?
  • Вопрос задан
  • 407 просмотров
Подписаться 1 Простой 3 комментария
Пригласить эксперта
Ответы на вопрос 3
@Apologiz
Разработчик
Да оставьте вы всю работу GC, если вы не пишете демоны на PHP конечно...
Вообще в данном примере ссылка не нужна, как уже было написано в комментариях.
Зачем вы усложняете?)

Ключи массивов и так передаются по ссылке не явно, если нет изменений этого массива или его ключей.
А если на картину в целом посмотреть, то зачем вам вообще $arParams["PROPERTY_CODE"]
Если:
foreach($arParams["PROPERTIES"] as $value)
{
    var_dump($value);
}

даст тот же результат?
Ответ написан
Комментировать
@Vitsliputsli
Все переменные, которые переданы по ссылке, всегда нужно удалять. Верно?

Нет
Ответ написан
Комментировать
@grinat
Смысл? Когда скрипт отработает, он сдохнет вместе со всеми переменными. Этим смысл есть заниматься, если это демон, и через ссылку течет память, но на практике проще за демонами следить и их перегружать, потому что течет стандартная библиотека и с этим ничего не сделать, может быть в каком-нить php8 наконец это победят.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы