2011-05-11 2 views
4

Каков наилучший способ обработки ошибок? Это то, что я придумал:Лучший способ обработки ошибок?

class test { 

    public static function Payment($orderid, $total) { 
     if (empty($orderid) && empty($total)) { 
      return array('status' => 'fail', 'error' => 'Missing Data'); 
     } 
    } 

} 

Я слышал о Try/Exceptions, но как вписаться в мой код? Если бы вы могли представить пример, это было бы здорово!

ответ

3

Как указано, используйте Exceptions. Конкретный для вашего примера: throw исключение, если какое-либо условие терпит неудачу. Затем, когда вы вызываете метод, который может генерировать исключение, вы завершаете его блоком обработки try/catch.

class test { 
    public static function Payment($orderid, $total) { 
    if (empty($orderid) && empty($total)) { 
     throw new Exception('Missing Data'); 
    } 
    } 
} 


try { 
    test::Payment("1", "2"); //should be fine 
    test::Payment(); //should throw exception 
} catch (Exception $e){ 
    echo $e; 
    //do other things if you need 
} 
+0

Спасибо за образец .. test :: Payment ("1", "2"); будет в файлах контроллера. Как это будет работать? – user622378

+1

@ user622378 Просто поместите весь блок try/catch в файл вашего контроллера. Я просто разместил его вне класса, чтобы продемонстрировать его использование. –

+0

Спасибо :) .... – user622378

5

Если вы используете PHP 5, вы можете обрабатывать ошибки, за исключением:

http://fr2.php.net/manual/en/class.exception.php

Этим путь чист, чем ручные сообщения набора исключений, потому что у вас есть доступ к системе попробовать поймать, и вы можете выделить исключение обработка

0

Я склоняюсь к отбрасыванию исключений, а затем используя механизм try/catch, чтобы справиться с последствиями. Страница руководства находится здесь: http://php.net/manual/en/language.exceptions.php

1

You could use exceptions.

Однако в используемом случае, который вы опубликовали, достаточно просто выполнить проверки на уровне контроллера.

Я также считаю, что явная проверка возвращаемого типа для массива (при сбое) является интуитивно понятным.

1

Вот как вы можете изменить свой код, чтобы использовать исключение. Это также помогает документировать обстоятельства, при которых возникает исключение.

class test { 

    /** 
    * [method description] 
    * @throws Exception if the order ID or total is empty 
    */ 
    public static function Payment($orderid, $total) { 
     if (empty($orderid) && empty($total)) { 
      throw new Exception("fail: Missing Data"); 
     } 
    } 

} 

Вы также можете создать свой собственный класс исключений, если вы хотите включить дополнительные данные в исключение.

class MyException extends Exception{ 
    public $status, $error; 
    public function __construct($status, $error){ 
    parent::__construct("$status: $error"); 
    $this->status = $status; 
    $this->error = $error; 
    } 
} 
Смежные вопросы