6

Каково назначение символа @ в PHP?

4

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

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

В чем заключается назначение этого символа?

5 ответ(ов)

0

Также обратите внимание, что, несмотря на скрытие ошибок, любой пользовательский обработчик ошибок (установленный с помощью set_error_handler) все равно будет выполнен!

0

Как уже кто-то ответил ранее: оператор @ в PHP подавляет все ошибки, включая уведомления, предупреждения и даже критические ошибки.

НО: Пожалуйста, действительно не используйте оператор @ вообще.

Почему?

Что ж, потому что, когда вы используете оператор @ для подавления ошибок, вы не имеете абсолютно никаких подсказок о том, с чего начать, когда возникает ошибка. У меня уже был некий "опыт" с устаревшим кодом, где некоторые разработчики часто использовали оператор @. Особенно в таких случаях, как операции с файлами, сетевые вызовы и т. д. Это те случаи, когда многие разработчики рекомендуют использовать оператор @, поскольку иногда это действительно выходит за рамки, когда возникает ошибка (например, API третьих сторон может быть недоступен и т. д.).

Но зачем все-таки не использовать его? Давайте посмотрим с двух точек зрения:

Как разработчик: Когда используется оператор @, я абсолютно не понимаю, с чего начать. Если есть сотни или даже тысячи вызовов функций с @, ошибка может произойти где угодно. В этом случае никакого разумного отладки невозможно. И даже если это просто ошибка стороннего API — ну и ладно, вы быстро закончили. 😉 Более того, лучше добавить достаточно деталей в журнал ошибок, чтобы разработчики могли легко решить, является ли запись в журнале чем-то, что необходимо проверить далее, или это просто ошибка стороннего поставщика, которая выходит за рамки ответственности разработчика.

Как пользователь: Пользователям совершенно не важно, в чем причина ошибки. Программное обеспечение должно работать для них, помогать завершить конкретную задачу и т. д. Им не важно, является ли это ошибкой разработчика или проблемой стороннего API. Особенно для пользователей я настоятельно рекомендую записывать все ошибки, даже если они выходят за рамки. Возможно, вы заметите, что конкретный API часто недоступен. Что вы можете сделать? Вы можете обсудить это с вашим партнером по API, и если они не могут поддерживать стабильность, вам стоит, возможно, поискать другого партнера.

Вкратце: Вы должны знать, что существует что-то вроде @ (знание всегда полезно), но просто не используйте его. Многие разработчики (особенно те, кто отлаживает код других) будут вам очень благодарны.

0

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

Пример использования:

@file_get_contents('http://www.exaple.com');

Если домен "http://www.exaple.com" недоступен и вызов функции file_get_contents приводит к ошибке, то без @ вы увидите сообщение об ошибке. Однако, если использовать @, никаких сообщений об ошибках не будет выдано. Будьте осторожны с этим, так как подавление ошибок может затруднить отладку кода.

0

Если бы мы не использовали оператор "@" в нашем коде, он бы выглядел следующим образом:

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

Но что произойдет, если файл, который мы пытаемся открыть, не существует? В этом случае будет показано сообщение об ошибке.

Чтобы подавить сообщение об ошибке, мы используем оператор "@" следующим образом:

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

Такой подход позволяет предотвратить вывод ошибок на экран, что может быть полезно в ситуациях, когда вы хотите обработать ошибку более элегантным образом или просто скрыть её от пользователя. Однако стоит помнить, что подавление ошибок может затруднить отладку, так как вы не будете видеть, если что-то пошло не так. Лучше использовать более безопасные методы обработки ошибок, например, проверку результата функции fopen() и логирование ошибок, если они возникают.

0

Если открытие файла не удается, создается ошибка уровня E_WARNING. Вы можете использовать символ @, чтобы подавить это предупреждение.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь