Символ "перед" перед именем переменной в PHP: @$_POST

Я видел вызовы функций, которым предшествует символ at для отключения предупреждений. Сегодня я просматривал код и нашел это:

$hn = @$_POST['hn'];

Что хорошего здесь будет?

6 ответов

Решение

@ является оператором подавления ошибок в PHP.

PHP поддерживает один оператор контроля ошибок: знак at (@). При добавлении к выражению в PHP любые сообщения об ошибках, которые могут быть сгенерированы этим выражением, будут игнорироваться.

Увидеть:

Обновить:

В вашем примере он используется перед именем переменной, чтобы избежать E_NOTICE ошибка там. Если в $_POST массив, hn ключ не установлен; это бросит E_NOTICE сообщение, но @ используется там, чтобы избежать этого E_NOTICE,

Обратите внимание, что вы также можете поместить эту строку поверх вашего скрипта, чтобы избежать E_NOTICE ошибка:

error_reporting(E_ALL ^ E_NOTICE);

Он не выдаст предупреждение, если $_POST['hn'] не установлено.

Все это означает, что, если $_POST['hn'] не определен, то вместо того, чтобы выдавать ошибку или предупреждение, PHP просто назначит NULL для $hn.

Он подавляет предупреждения, если $_POST['кое-что'] не определено.

Я отвечаю 11 лет спустя за полноту относительно современного php.

Начиная с php 7.0, оператор объединения null является более простой альтернативой отключению предупреждений в этом случае. Оператор был разработан (среди прочего) для этой цели.

Без отображается предупреждение:

      $ php -r 'var_dump($_POST["hn"]);'
PHP Warning:  Undefined array key "hn" in Command line code on line 1
NULL

Вывод с отключением предупреждений ( @):

      $ php -r 'var_dump(@$_POST["hn"]);'
NULL

Получение того же результата с помощью современного оператора объединения с нулевым значением ( ??):

      $ php -r 'var_dump($_POST["hn"] ?? null);'
NULL

Что-то, что другие забыли упомянуть, это то, что помимо игнорирования NOTICE, переменная будет установлена ​​в NULL,

Другие вопросы по тегам