Оператор @
является просто сокращением для следующего:
$oldReportingLevel = error_reporting();
error_reporting(0);
// execute @'d code here
error_reporting($oldReportingLevel);
Другими словами, @
временно устанавливает уровень сообщения об ошибках равным 0. Хотя вы не можете проверить, действительно литекущий уровень сообщений об ошибках вызван оператором @
или нет, вы можете проверить текущий уровень сообщений об ошибках и обойти собственную обработку ошибок, если уровень равен 0.
Что вынаверно хочу вот что:
if (error_reporting() != 0) {
psyo::error("Error while executing query (sql: {$sql}).");
}