Символ "перед" перед именем переменной в 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
,