Я просто заметил, что PHP имеет тип casting (unset)
, и мне интересно, для чего его можно было бы использовать. Он даже не отключает переменную, она просто отбрасывает ее в NULL, что означает, что (unset)$anything
должно быть точно таким же, как просто писать NULL
.
# Really unsetting the variable results in a notice when accessing it nadav@shesek:~$ php -r '$foo = 123; unset($foo); echo $foo;' PHP Notice: Undefined variable: foo in Command line code on line 1 PHP Stack trace: PHP 1. {main}() Command line code:0 # (unset) just set it to NULL, and it doesn't result in a notice nadav@shesek:~$ php -r '$foo = 123; $foo=(unset)$foo; echo $foo;'
с# Really unsetting the variable results in a notice when accessing it nadav@shesek:~$ php -r '$foo = 123; unset($foo); echo $foo;' PHP Notice: Undefined variable: foo in Command line code on line 1 PHP Stack trace: PHP 1. {main}() Command line code:0 # (unset) just set it to NULL, and it doesn't result in a notice nadav@shesek:~$ php -r '$foo = 123; $foo=(unset)$foo; echo $foo;'
Кто-нибудь когда-либо использовал его для чего-нибудь? Я не могу придумать для этого никакого использования …
Добавлено:
Основная идея вопроса:
Какая причина использовать (unset)$smth
вместо просто NULL
?
Насколько я могу судить, нет смысла использовать
$x = (unset)$y;
над
$x = NULL;
(unset)$y
всегда оценивается как null, и в отличие от вызова unset($y)
приведение не влияет на $y
вообще.
Единственное различие заключается в том, что использование приведения все равно будет генерировать уведомление «неопределенной переменной», если $y
не определено.
Есть ошибка PHP о связанной проблеме. Ошибка на самом деле о (в моем сознании) вводящем в заблуждение прохождении в другом месте документации, которая гласит:
Приведение переменной в нуль удаляет переменную и отменяет ее значение.
И это явно не так.
Я бы предположил (зная PHP, и это новно … интересный выбор для разных вещей, я могу быть совершенно неправ), что это так, что значение не нуждается в настройке для var. Для точной причины использовать его для кода, я не могу придумать пример, но что-то вроде этого:
$foo = bar((unset) baz());
Там вы хотите или должны иметь нуль в качестве аргумента для бара и все равно нужно вызвать baz()
. Синтаксис функции изменился, и кто-то сделал исправление утиной ленты, как то, что кажется горячим с PHP.
Поэтому я бы сказал: нет причин использовать его в хорошо продуманной архитектуре; могут быть использованы для решений, которые настолько неясны, что я голосовал против них на первом месте.
Например, его можно использовать как это
function fallback() { // some stuff here return 'zoo'; } var_dump(false ? 'foo' : fallback()); // zoo var_dump(false ? 'foo' : (unset) fallback()); // null
Даже если fallback()
возвращает «zoo» (unset)
, это значение будет очищено.