ФорумПрограммированиеPHP для идиотов → Обработка ошибок в функциях

Обработка ошибок в функциях

  • kendo

    Сообщения: 446 Репутация: N Группа: Адекваты

    Spritz 14 мая 2008 г. 3:35

    Ух, не знал, как правильно обозвать тему.
    Суть такова, есть несколько функций, которые либо возвращают результат, либо образуют ошибку. Год назад я писал код прмерно так:
    $result["a"] = a();
    if (false === $result["a"]) {
     // …
    }
    $result["b"] = b();
    if (false === $result["b"]) {
     // …
    }

    Т.е. в случае неудачи возвращалось значение FALSE, а потом в условии добавлялся текст ошибки.
    Сейчас вот думаю, как можно более проще написать этот участок кода? Или оставить как есть?
    Хотя… была еще мысль сделать в виде try/catch блоков:
    try {
     $result["a"] = a();
     $result["b"] = b();
    } catch (Exception $e) {
     // …
    }

    Т.е. в функция в случае неудачи вызывала бы исключение с текстом ошибки.
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 14 мая 2008 г. 5:19, спустя 1 час 44 минуты 27 секунд

    Ну вообще перехват исключений считается более "взрослым" подходом. А что юзать — это как тебе удобнее.
    Не понял смысла темы, если честно.
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 14 мая 2008 г. 5:28, спустя 9 минут 27 секунд

    А что юзать — это как тебе удобнее.

    это правильный ответ на эту тему.
    adw/0
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 14 мая 2008 г. 7:01, спустя 1 час 32 минуты 38 секунд

    я так понял человек просит отрефакторить код

    ну давай попробуем


    function a(){// возвращает true / false
    global $log, $result;
    }

    if (a() && b() …) {
    // …
    }



    но вообще это криво для логов я бы использовал объект всетаки с трай-кечами


    class Clas{
    private $log;
    public function __construct(){
    $this->log = new LogFactory(__CLASS__);
    }
    public function a(){
    try{

    $this->log->debug("два часа полет нормальный");

    }catch(Exeption $e){
    $this->log->error("чтото не так");
    throw new ClasExeption();
    }
    return $result;
    }
    }

    try{
    $c = new Clas();
    $c->a();
    $c->b();
    $c->c();
    }catch{

    }



  • ghost

    Сообщения: 883 Репутация: N Группа: Джедаи

    Spritz 14 мая 2008 г. 8:12, спустя 1 час 10 минут 41 секунду

    тут в faq-е была подробная статья про обработку исключений. посмотри ее
  • kendo

    Сообщения: 446 Репутация: N Группа: Адекваты

    Spritz 14 мая 2008 г. 13:56, спустя 5 часов 44 минуты 4 секунды

    ghost, статью я давно уже читал, спасибо :)
    Старый Мавр, спасибо, Вы поняли мою идею, хоть и не совсем корректно.
    Вообще, если подходить к решению задачи только с точки зрения удобства, то, несомненно, удобней с try/catch блоками.

Пожалуйста, авторизуйтесь, чтобы написать комментарий!