Welcome to php club

PHP FAQ from PHPclub.ru: ErrorControl ...

Начало | Каталог | Изменения | НовыеКомментарии | Вам запрещён доступПользователи | Вам запрещён доступРегистрация | Вход:  Пароль:  

Использование оператора @ – за и против.


1.За
2.Против
3.Варианты, при которых использование @ допустимо
4.Как программировать без @


Следует заметить, что речь не идёт о том обрабатывать ошибку или нет, как многие путают – обрабатывать её надо обязательно!
Речь идёт о показе/непоказе этой сообщения об ошибке пользователю.


1. За использование оператора @


  • Ускорение процесса написания кода
  • Уменьшение размера исходного кода
  • Лень обрабатывать ошибку (для подавления нотиса)

Пример:

<?php
$action 
= isset($_GET['action']) ? $_GET['action'] : ‘’;
//...
?>

проще написать


<?php
$action
=@$_GET['action'];
//...
?>

2. Против использования оператора @

  • Усложняет процесс поиска и исправления ошибок
  • «Ломает» логику программы
  • Совесть программиста

3. Варианты, при которых использование @ допустимо


  • «Собака» имеет право на жизнь только в паре с обработчиком сообщения об ошибке.
  • Использование для функций mysql_*(), потому что у них специальный обработчик ошибок mysql_error().

<?php
if ( ! ($link = @mysql_connect('localhost''mysql_user''mysql_password'))) {
   die(
'Could not connect: ' mysql_error());
}
echo 
'Connected successfully';
mysql_close($link);
?>


<? 
    ini_set
('track_errors',1); 
     
    if (!@
fopen('/tmp/not_exists','r')){ 
        echo 
$php_errormsg,"\n";     
    } 
     
    if (!@
fopen('/etc/can_not_open','w+')){ 
        echo 
$php_errormsg,"\n";     
    } 
?>

Output:
failed to open stream: No such file or directory
failed to open stream: Permission denied

4. Как программировать без @


NB! Необходимо инициализиваровать все переменные, которые используются по ходу работы скрипта.


<?php

error_reporting
(E_ALL);

//
// Рекомендуется задавать свой обработчик ошибок
//
function myErrorHandler($errno$errstr$errfile$errline)
{
    switch (
$errno)
    {
        case 
E_ERROR:
        case 
E_USER_ERROR:
            echo 
"<b>My ERROR</b> [$errno] $errstr<br />\n";
            echo 
"  Fatal error in line $errline of file $errfile";
            echo 
", PHP " PHP_VERSION " (" PHP_OS ")<br />\n";
            echo 
"Aborting...<br />\n";
            exit(
1);
        break;
        case 
E_WARNING:
        case 
E_USER_WARNING:
            echo 
"<b>My WARNING</b> [$errno] $errstr<br />\n";
        break;
        case 
E_USER_NOTICE:
        case 
E_NOTICE:
            echo 
"<b>My NOTICE</b> [$errno] $errstr<br />\n";
        break;
        default:
            echo 
"Unkown error type: [$errno] $errstr<br />\n";
        break;
    }
}

$old_error_handler set_error_handler('myErrorHandler');

$file_name 'foo.bar';

//
// Перед чтением из файла проверяем доспупность файла для чтения (если файл 
// существует и есть права на чтение) иначе вызываем ошибку
//
if (is_readable($file_name))
{
    
$fp file_get_contents($file_name);
    echo 
$fp;
}
else
{
    
trigger_error('Can\'t find or open the file!'E_USER_ERROR);
}
?>


Информационные ресурсы


  1. http://php.net
  2. How to handle those pesky errors in PHP


 
Комментариев нет. [Показать комментарии/форму]