Писец, сколько людей упёртых не там, где надо. Нахватались поначалу «правильных советов от великих гуру» и теперь остальным мозг выносят. «Никогда не используйте eval», «никогда не используйте @ в PHP»…
Действительно ли никогда нельзя использовать собаку (@) в пыхе? Давайте просто головой подумаем.
Итак, как можно бороться с ошибками в программном коде? Есть два основных способа:
- Путём их игнорирования.
- Путём их корректной обработки.
Как всем нормальным людям ясно, первый способ (для которого часто и используется собака) ведёт нас прямиком в ад. Человека, который не обрабатывает ошибки в коде, никто не будет уважать, не подаст ему руки и никакая девушка не выйдет за него замуж.
Нам нужна корретная обработка. Однако, ошибки бывают разные и способы их корректной обработки тоже разные.
Первый тип ошибок: ошибки в программе. Синтаксическая ошибка, в запросе опечатались, лень было проверить существование запрашиваемого ключа в массиве и т.п. Аналог проверяемых исключений (RuntimeException). Корректная обработка подобных ошибок может быть только одна — исправление программного кода на этапе разработки. И для этого нам нужно чётко отлавливать их появление и ни в коем случае не подавлять сообщения о них. Здесь собака действительно вредна.
Второй тип — непроверяемые. Сервер базы данных отвалился, сокет не открывается. На этапе разработки мы не можем устранить возможность подобных происшествий. Единственное, что можем, это обрабатывать эти ситуации. Пример:
$lid = mysql_connect($host, $user, $password);
if (!$lid) {
throw new Exception('MySQL fail');
}
Мы не спрятали голову в песок. Мы корректно обработали возможную ошибку. Но вот незадача — несмотря на это, mysql_connect()
всё равно выкинет совершенно уже ненужный нам Warning
.
К чёрту Warning
!
$lid = @mysql_connect($host, $user, $password);
if (!$lid) {
throw new Exception('MySQL fail');
}
Вывод: слушайте умных дядей, но и своей головой думайте.