Задался вопросом, в каких случаях оправдано употребление «@» (собаки) для подавления ошибок, которая позволяет подавлять ошибки не только у операторов, но и заменять собой вызовы проверок с помощью «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 не пустая и присутствует в массиве …
}
Буду рад, если кому пригодится (:
Побороть отображение ошибок можно несколькими способами. Например:
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 не пустая и присутствует в массиве …
}
Буду рад, если кому пригодится (: