Насколько я знаю (что очень мало), есть два способа:
$var = new object()
Затем:
// Method 1: Set to null
$var = null;
// Method 2: Unset
unset($var);
Другой лучший способ? Я тут волосы секу?
php
object
destructor
destroy
PandemoniumSyndicate
источник
источник
new
один раз, мы должны использоватьdelete
один раз. Это не так в PHP? Есть автоматическая сборка мусора, когда объект больше не нужен?unset()
Удаляет ли ссылку на объект?Удобный пост, объясняющий несколько неправильных представлений об этом:
Не вызывайте деструктор явно
Это покрывает несколько заблуждений о том, как работает деструктор. Вызов его явно не приведет к уничтожению вашей переменной, согласно документу PHP5:
В сообщении выше говорится, что установка переменной на null может работать в некоторых случаях, если ничто другое не указывает на выделенную память.
источник
Краткий ответ: нужны оба.
Я чувствую, что был дан правильный ответ, но минимально. Да, обычно unset () лучше всего подходит для "скорости", но если вы хотите немедленно освободить память (за счет процессора), следует использовать null.
Как уже упоминалось, установка значения null не означает, что все будет восстановлено, у вас могут быть объекты с общей памятью (неклонированные), которые предотвратят разрушение объекта. Более того, как говорили другие, вы все равно не можете «уничтожить» объекты явно, так что вам все равно не следует пытаться это сделать.
Вам нужно будет выяснить, что лучше для вас. Также вы можете использовать __destruct () для объекта, который будет вызываться при unset или null, но его следует использовать осторожно и, как говорили другие, никогда не вызывать напрямую!
видеть:
http://www.stoimen.com/blog/2011/11/14/php-dont-call-the-destructor-explicitly/
В чем разница между присвоением NULL и отключением?
источник
Это простое доказательство того, что вы не можете уничтожить объект, вы можете уничтожить только ссылку на него.
возвращается
Посмотреть в действии можно здесь: https://eval.in/1054130
источник
$var2
что была ссылка$var
. Теперь вы также уничтожаете$var
и, предполагая, что на объект нет других ссылок, все готово.Может быть в ситуации, когда вы создаете новый объект mysqli.
$MyConnection = new mysqli($hn, $un, $pw, $db);
но даже после того, как вы закроете объект
$MyConnection->close();
если вы будете использовать
print_r()
для проверки содержимого$MyConnection
, вы получите сообщение об ошибке, как показано ниже:в этом случае вы не можете использовать,
unlink()
потомуunlink()
что потребуется строка имени пути, но в данном случае$MyConnection
это объект.Итак, у вас есть другой выбор - установить для него значение null:
$MyConnection = null;
теперь все идет хорошо, как вы и ожидали. У вас нет содержимого внутри переменной,
$MyConnection
а также вы уже очистили объект mysqli.Перед установкой значения переменной рекомендуется закрыть объект
null
.источник
Я бы выбрал unset, потому что это может дать сборщику мусора более точную подсказку, чтобы память снова стала доступной раньше. Будьте осторожны, чтобы любые объекты, на которые указывает объект, либо имели другие ссылки, либо сначала сбрасывались, либо вам действительно придется ждать сборщика мусора, поскольку тогда для них не будет никаких дескрипторов.
источник