С C ++ 17 вы можете использовать структурированное связывание для выполнения этого:
Это было упомянуто в страница руководства сброса в 2009 :
unset()
делает, что его имя говорит - сбрасывает переменную. Это не вызывает непосредственное освобождение памяти. Сборщик "мусора" PHP сделает это, когда это будет видеть соответствия - намерением так скоро, как те циклы ЦП не необходимы так или иначе, или уже прежде чем сценарий исчерпал бы память, независимо от того, что происходит сначала., Если Вы делаете
$whatever = null;
тогда, Вы переписываете данные переменной. Вы могли бы получить память, освобожденную / уменьшенный быстрее, но она может украсть циклы ЦП из кода, которому действительно нужны они раньше, закончившись в более длительное полное время выполнения.
(С 2013, это unset
страница справочника больше не включают тот раздел)
Примечание, что до php5.3, если Вы имеете , два объекта в циклической ссылке , такой как в отношениях отцов и детей, называя сброс () на родительском объекте не освободят память, используемую для родительской ссылки в дочернем объекте. (И при этом память не будет освобождена, когда родительский объект будет собран "мусор".) ( ошибка 33595 )
<час>вопрос" различие между сбросом и = пустой указатель " детали некоторые различия:
<час> unset($a)
также удаляет $a
из таблицы символов; например:
$a = str_repeat('hello world ', 100);
unset($a);
var_dump($a);
Выводы:
Notice: Undefined variable: a in xxx
NULL
, Но когда
$a = null
используется:
$a = str_repeat('hello world ', 100);
$a = null;
var_dump($a);
Outputs:
NULL
<час>кажется, что
$a = null
немного быстрее, чемunset()
дубликат: обновление записи таблицы символов, кажется, быстрее, чем удаление его.
unset
) переменная, ошибка будет инициирована, и значение для переменного выражения будет нулевым. (Поскольку, что еще должен сделать PHP? Каждое выражение должно привести к некоторому значению.) unset
не на самом деле функция, но конструкция языка . Это больше не вызов функции, чем return
или include
.
Кроме проблем производительности, с помощью unset
делает код намерение намного более ясный.
Путем выполнения сброса () на переменной, Вы по существу отметили переменную для 'сборки "мусора"' (PHP действительно не имеет один, но для пользы примера), таким образом, память не сразу доступна. Переменная больше не содержит данные, но стек остается в большем размере. Выполнение пустого метода отбрасывает данные и уменьшает стековую память почти сразу.
Это было от личного опыта и других также. См. комментарии сброса () функция здесь .
я лично использую сброс () между повторениями в цикле так, чтобы у меня не было задержки стека, находящегося эй-yo'd в размере. Данных не стало, но место остается. На следующем повторении память уже берется php и таким образом, более быстрая для инициализации следующей переменной.