они будут делать немного разные вещи:
unset удалит переменную из таблицы символов и уменьшит счетчик ссылок на содержимое на 1. ссылки на переменную после этого вызовут уведомление («неопределенная переменная»). (обратите внимание, что объект может переопределить поведение unset по умолчанию для своих свойств, реализуя __unset ()).
установка в пустую строку уменьшит счетчик ссылок на содержимое на 1, установит содержимое в строку длиной 0, но символ все равно останется в таблице символов, и вы все равно можете ссылаться на переменную , (обратите внимание, что объект может переопределить поведение присваивания по умолчанию для своих свойств, реализуя __set ()).
в старых php, когда число ссылок падает до 0, вызывается деструктор и память освобождается немедленно. в более новых версиях (> = 5.3) php использует буферизованную схему, которая лучше обрабатывает циклические ссылки (http://www.php.net/manual/en/features.gc.collecting-cycles.php),, поэтому память может быть освобождена позже, хотя она может вообще не задерживаться ... в любом случае В этом случае проблем не возникает, а новый алгоритм предотвращает утечки памяти.
если имя переменной больше не будет использоваться, значение unset должно быть на несколько циклов процессора быстрее (поскольку новое содержимое создавать не нужно). но если имя переменной будет использовано повторно, php придется создать новую запись в таблице переменных и символов, так что это может быть медленнее! разница будет незначительной разницей в большинстве ситуаций.
если вы хотите пометить переменную как недопустимую для последующей проверки, вы можете установить ее в false или в null. это было бы лучше, чем тестирование с помощью isset (), потому что опечатка в имени переменной вернула бы false безо всякой ошибки ... вы также можете передать ложные и нулевые значения другой функции и сохранить значение sentinel, чего нельзя сделать с помощью неустановленная переменная ...
так я бы сказал:
$var = false; ...
if ($var !== false) ...
или
$var = null; ...
if (!is_null($var)) ...
будет лучше для проверки дозорных значений, чем
unset($var); ...
if (isset($var)) ...