Возможные дубликаты:
Что лучше для освобождения памяти с помощью PHP: unset () или $ var = null
Есть ли реальная возможность отключения переменных в php?
class test { public function m1($a, $b) $c = $a + $b; unset($a, $b); return $c; } }
Верно ли, что отменяющие переменные фактически не уменьшают потребление памяти во время выполнения?
Верно ли, что отменяющие переменные фактически не уменьшают потребление памяти во время выполнения?
Ага. От PHP.net :
unset () делает то, что говорит его имя, – отключает переменную. Это не приводит к немедленному освобождению памяти. Сборщик мусора PHP будет делать это, когда он увидит припадки – по желанию, как только эти циклы процессора не будут нужны в любом случае, или еще до того, как скрипт закончится из памяти, что бы ни случилось раньше.
Если вы делаете $ any = null; то вы переписываете данные переменной. Вы могли бы освободить память / сократиться быстрее, но она может украсть циклы процессора из кода, который действительно нуждается в них раньше, что приведет к более длительному общему времени выполнения.
Что касается вашего другого вопроса:
И есть ли какая-либо причина для отмены переменных, кроме разрушения сеансовых переменных, например, или для определения области видимости?
Не совсем, вы в значительной степени суммировали это.
PHP очистит память самостоятельно с помощью сборщика мусора, и он обычно выполняет довольно хорошую работу. unsetting просто сделает его явным, что вы сделали с этой конкретной переменной.
Вероятно, нет никакой выгоды для простых типов данных, но для любых системных ресурсов, которые вы хотите использовать для освобождения этих ресурсов.
Несмотря на то, что нет никакой реальной выгоды по сравнению с собственной сборкой мусора PHP, я буду иногда unset()
переменные, чтобы в коде было ясно, что роль var была завершена и больше не будет доступна или не назначена. Я, как правило, не делаю этого с атомными типами данных, но вместо этого с основными участниками сценария – конфигурационные синглтоны, большие объекты и т. Д.
Это зависит от того, что такое переменная. Если это большой массив, который потребляет несколько мегабайт данных, и ваш сценарий может потребовать много памяти в будущем (то есть: до того, как он завершит выполнение), тогда было бы разумно пометить эту память как доступную для использования, отключив массив.
Тем не менее, это действительно полезно, если массив все еще находится в области видимости, так как PHP будет автоматически автоматически удалять его в противном случае.
Что касается вашего предоставленного примера, нет необходимости использовать unset, так как эти переменные сразу выходят за рамки.
Он освобождает память, которая используется вашим скриптом. См. http://ie2.php.net/memory_get_usage .
Преимущество состоит в том, что скрипты, которые обрабатывают большие объемы данных, вы можете столкнуться с ошибками памяти, см. Параметр memory_limit ini для получения дополнительной информации об этом.
Таким образом, да, может быть полезно, но если вы не работаете с большими объемами данных, вам не нужно использовать его.
Вы также можете захотеть отключить переменную, чтобы предотвратить использование их значения позже, но если это так, можно утверждать, что ваш код должен быть написан по-разному, чтобы это не происходило.
Как указано в unset
unset () делает то, что говорит его имя, – отключает переменную. Это не приводит к немедленному освобождению памяти. Сборщик мусора PHP будет делать это, когда он увидит припадки – по желанию, как только эти циклы процессора не будут нужны в любом случае, или еще до того, как скрипт закончится из памяти, что бы ни случилось раньше. Если вы делаете $ any = null; то вы переписываете данные переменной. Вы могли бы освободить память / сократиться быстрее, но она может украсть циклы процессора из кода, который действительно нуждается в них раньше, что приведет к более длительному общему времени выполнения.