Pull to refresh

PHP. Собака — зло?

Reading time1 min
Views5.5K
Задался вопросом, в каких случаях оправдано употребление «@» (собаки) для подавления ошибок, которая позволяет подавлять ошибки не только у операторов, но и заменять собой вызовы проверок с помощью «isset» ( if (@$_GET['param']) …)


Побороть отображение ошибок можно несколькими способами. Например:

1. Оператором «@»:
$а = @(57/0);
В данном случае обходим проверку деления на ноль. Быстрое решение для ленивого кодера. Отмечу, что это быстрое решение работает немного медленнее, к тому же усложняется отладка кода.

2. Отлавливаем операторами try … catch
try {операторы, где могут возникнуть ошибки} catch(Exception $e) {реагируем на ошибку}

3. Выставляем нужный уровень оповещения.
Если переменные не инициализированы (не существуют), часто выставляют нужный error_reporting и display_errors в ноль и не заморачиваются с проверками:

$b += (int)$_GET['отсутствующая переменная'];

вместо:

if (isset($_GET['переменная'])) {
$b += (int)$_GET['переменная']);
}

Как вы считаете, указывает ли использование «@» на некомпетентность программиста? Или все-таки в некоторых случаях оправдано употребление этого оператора (fopen, mysql_connect…)?

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

function chk($array, $i) {
return isset($array[$i])? $array[$i]: null;
}

Выглядит так:
if ($var = (int) chk($_GET, 'индекс')) {
$b += $var
}

А так можно заодно проверить наличие переданной переменной в массиве:
if (in_array($var = chk($_GET, 'индекс'), array('hello', 'world'))) {
… переменная $var не пустая и присутствует в массиве …
}

Буду рад, если кому пригодится (:
Tags:
Hubs:
Total votes 20: ↑12 and ↓8+4
Comments73

Articles