Я НИКОГДА не позволяю себе использовать «@» ... период.
Когда я обнаруживаю использование «@» в коде, я добавляю комментарии, чтобы сделать его очевидным, как в момент использования , и в док-блоке вокруг функции, в которой он используется. Я тоже был укушен отладкой «преследовать призрак» из-за такого подавления ошибок, и я надеюсь облегчить его следующее, выделив его использование, когда я его найду.
В тех случаях, когда Я хочу, чтобы мой собственный код выдавал исключение, если встроенная функция PHP обнаруживает ошибку, а «@» - это простой способ, я вместо этого хочу сделать что-то другое, получающее тот же результат, но (снова) явственно видно в коде:
$orig = error_reporting(); // capture original error level
error_reporting(0); // suppress all errors
$result = native_func(); // native_func() is expected to return FALSE when it errors
error_reporting($orig); // restore error reporting to its original level
if (false === $result) { throw new Exception('native_func() failed'); }
Это намного больше кода, который просто пишет:
$result = @native_func();
, но я предпочитаю, чтобы мое подавление требовало ОЧЕНЬ ОБЫЧНОГО, ради бедная отладочная душа, которая следует за мной.