Подтвердить что ты не робот

Кто-нибудь когда-либо использовал 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?

4b9b3361

Ответ 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