Какая польза от символа @ в PHP? - PullRequest
545 голосов
/ 23 июня 2009

Я видел использование @ перед некоторыми функциями, например:

$fileHandle = @fopen($fileName, $writeAttributes);

Какая польза от этого символа?

Ответы [ 11 ]

1 голос
/ 17 февраля 2016

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

Если вы установили пользовательский обработчик ошибок с помощью set_error_handler(), то он все равно будет вызываться, но этот пользовательский обработчик ошибок может (и должен) вызывать error_reporting(), который вернет 0 при вызове, вызвавшем ошибку предшествовал @.

<?php
/* Intentional file error */
$my_file = @file ('non_existent_file') or
    die ("Failed opening file: error was '$php_errormsg'");

// this works for any expression, not just functions:
$value = @$cache[$key];
// will not issue a notice if the index $key doesn't exist.

?>

Примечание: -

1) @ -оператор работает только с выражениями.

2) Простое правило: если вы можете получить значение чего-либо, вы можете добавить к нему оператор @. Например, вы можете добавить его к переменным, функции и включить вызовы, константы и так далее. Вы не можете добавить его к определениям функций или классов, или к условным структурам, таким как if и foreach и т. Д.

Внимание: -

В настоящее время префикс оператора «@» даже отключается отчеты об ошибках для критических ошибок, которые прекратят работу скрипта выполнение. Среди прочего, это означает, что если вы используете «@» для подавить ошибки определенной функции, либо она недоступна или был опечатка, сценарий умрет прямо там без указание на то, почему.

...