Кто-нибудь когда-либо использовал PHP (unset) casting?
Я просто заметил, что PHP имеет тип casting для (unset)
, и мне интересно, для чего он может быть использован. Он даже не отменяет переменную, она просто отбрасывает ее в NULL, что означает, что (unset)$anything
должен быть точно таким же, как просто писать NULL
.
# Really unsetting the variable results in a notice when accessing it
[email protected]:~$ 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
[email protected]:~$ php -r '$foo = 123; $foo=(unset)$foo; echo $foo;'
Кто-нибудь когда-либо использовал его для чего-нибудь? Я не могу придумать для этого никакого использования...
Добавлено:
Основная идея вопроса:
В чем причина использования (unset)$smth
вместо NULL
?
Ответы
Ответ 1
Насколько я могу судить, нет смысла использовать
$x = (unset)$y;
над
$x = NULL;
(unset)$y
всегда оценивает значение null, и в отличие от вызова unset($y)
приведение не влияет на $y
вообще.
Единственное различие заключается в том, что использование приведения все равно будет генерировать уведомление "undefined", если $y
не определено.
Там есть ошибка PHP о связанной проблеме. Ошибка на самом деле о (в моем сознании) обманчивом проходе в другом месте документации, в которой говорится:
Приведение переменной в значение null приведет к удалению переменной и ее изменению.
И это явно не так.
Ответ 2
Догадайтесь (зная PHP и его новно... интересный выбор для разных вещей, я могу быть совершенно неправ), что это так, что значение не нуждается в настройке для var. Для точной причины использовать его для кода, я не могу придумать пример, но что-то вроде этого:
$foo = bar((unset) baz());
Здесь вы хотите или должны иметь нуль в качестве аргумента для строки и еще нужно вызвать baz()
. Синтаксис функции изменился, и кто-то сделал исправление утиной ленты, как то, что кажется горячим с PHP.
Так что Id говорит: нет причин использовать его в хорошо продуманной архитектуре; могут быть использованы для решений, которые настолько неясны, что Id голосует против них на первом месте.
Ответ 3
Например, он может быть использован как
function fallback()
{
// some stuff here
return 'zoo';
}
var_dump(false ? 'foo' : fallback()); // zoo
var_dump(false ? 'foo' : (unset) fallback()); // null
Даже если fallback()
возвращает "zoo" (unset)
, оно очистит это значение.
Ответ 4
Для тех, кто заинтересован в обновлении кода PHP до PHP 7.2 и выше, чтобы избавиться от сообщения об устаревании, это изменение автоматизировано в Rector: http://github.com/rectorphp/rector
Просто запустите уровень php72
в вашем коде /src
:
vendor/bin/rector process /src --level php72