@ символ перед викликом функції


135

Яка різниця між цими двома функціональними викликами в PHP?

init_get($somevariable);

@init_get($somevariable);

"@" закриє будь-які помилки та повідомлення PHP
Erkan Özkök

Відповіді:


210

"@" замовчить будь-які помилки php, які може викликати ваша функція.


Але що робити, якщо поставити @перед trigger_errorфункцією PHP ? Я бачив це в якомусь коді, але його поведінка для мене поки непослідовно. У деяких випадках я бачу, що про помилку повідомляється налаштованим обробником помилок, а в інших випадках вона, здається, отримує повідомлення.
fritzmg

2
@Буде тимчасово встановлений error_reportingв 0 , але не буде «придушувати» помилка.
solidgumby


36

Як уже відповіли, @завада зупинить показ помилки (якщо така є).
З точки зору продуктивності це не рекомендується.

Що робить php:

  • зчитування стану відображення помилок
  • встановлення відображення помилок, щоб не відображалося помилок
  • запуск вашої функції
  • встановлення відображення помилки на попередній стан

Якщо ви не хочете, щоб помилки відображалися у використанні error_reporting(0);.

Або просто написати безкоштовний код помилки: P


Віддайте перевагу ставити нуль, але якщо це працює, чудовий про це не знав :)
AntonioCS

1
Що з функціями, якими ви не керуєте, як, наприклад, пошта? Які ще варіанти існують? Я використовую @ прямо зараз, але було б здорово, щоб можна було робити по-іншому
spuas


6

Як усі казали, це зупиняє вихід помилок для цієї конкретної функції. Однак це значно знижує продуктивність, оскільки йому доведеться двічі змінити налаштування відображення помилок. Я рекомендую НЕ ігнорувати попередження чи помилки та виправляти код замість цього.


Дякую всім за ваші відповіді. Цей код не мій, я лише цікаво дивився на код phpBB, тому у мене немає проблем із виконанням. :) Знову дякую.
nixie
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.