Установите локальную переменную в ноль в PHP - PullRequest
2 голосов
/ 07 сентября 2011

Очень часто в коде, добавляемом моими более ориентированными на .NET коллегами, я сталкиваюсь с чем-то вроде этого:

function someFunction()
{
    $localVariable = otherFunction();
    $ret = $localVariable * 2; // or whatever

    $localVariable = null;
    return $ret;
}

Есть ли польза от установки $localVariable на ноль? Поскольку это локальная переменная (и, следовательно, она все равно выйдет из области видимости), я бы предположил, что нет, но, пожалуйста, исправьте меня, если я ошибаюсь.

Ответы [ 7 ]

5 голосов
/ 07 сентября 2011

Ваше предположение будет правильным для php и .NET.

3 голосов
/ 07 сентября 2011

Здесь необходимо учитывать две вещи: управление памятью и защитное кодирование.

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

ОДНАКО, для целей защитного кодирования это может быть хорошо.Этот пример просто глупый, но иногда в вашем коде хорошей идеей будет установить нулевые значения, когда вы закончите их использовать, так что, если они ДЕЙСТВИТЕЛЬНО будут использованы позже в функции, это взорвется лицом программистов (исразу же становится очевидным), а не приводит к ошибкам, которые трудно отследить.

1 голос
/ 07 сентября 2011

Как говорит CG, вы правы, полагая, что в этом нет необходимости.

Тем не менее, МОЖЕТ быть более уместным, если впоследствии появляется более интенсивный код, как в этой функции:

function someFunction()
{
    $localVariable = new MemoryPiggy();
    $number = $localVariable->calcValue();

    $localVariable = null;

    $localVariable2 = new AnotherMemoryHog($number);
    /*
     * Do stuff with $localVariable2
     */

    return $ret;
}

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

PS Это пример, когда следующая часть кода также сожирает память.Другой пример может быть, когда выполнение 2-й части кода занимает очень много времени.Однако, за исключением подобных ситуаций, нет необходимости увеличивать сложность вашей программы, обнуляя местных жителей.

1 голос
/ 07 сентября 2011

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

0 голосов
/ 07 сентября 2011

Единственная ситуация, в которой это имело бы смысл, - это если бы у вас был кто-то, кто научился кодировать в VBScript. В VBScript было много магии вокруг подсчета ссылок и очистки неиспользуемой памяти, поэтому многие привыкли устанавливать нулевые значения (или ничего в vbspeak). Если ваши коллеги .Net были со времен ASP (не ASP.Net), вполне вероятно, что они все еще имеют привычку делать это. Хотя другие постеры правы, в PHP и в .Net (VB или C #) это не имеет никакого значения.

0 голосов
/ 07 сентября 2011

Нет.

Если вам нужна слишком свободная память переменной, лучше использовать unset().

Однако, может быть полезно, если $localVariableэто большой объект или массив.Если задать значение null, данные станут несвязанными, и, следовательно, они будут удалены следующим образом.

Хотя вам не нужно ничего этого делать, поскольку все локальные переменные будут освобождены после завершения функции.

0 голосов
/ 07 сентября 2011

Нет.

Доверяйте PHP, чтобы управлять этим материалом для вас.

...