2016-10-15 2 views
3

Я пытаюсь обрабатывать некоторые ошибки в моем api. Однако я попробовал несколько способов выполнить то, что нужно для этого?PHP: Exception или Exception внутри пространства имен

В коде я использовал Exception, \ Exception, другой класс, распространяющийся на Exception, «use \ Exception». Ни один из этих вариантов не работает. Что мне нужно сделать, чтобы блокировать блокировку?

//Piece of source in the begin of file 
    namespace Business\Notifiers\Webhook; 
    use \Exception; 
    class MyException extends \Exception {} 

    //Piece of source from my class 
    try{ 

     $products = $payment->getProducts(); 
     if(count($products) == 0) 
      return; 
     $flight_id = $products[0]->flight_id; 
     $this->message = 'Sir, we have a new request: '; 
     $products = null; //Chagind it to null to force an error.. 
     foreach($products as $product){ 

      $this->appendAttachment(array(
       'color' => '#432789', 
       'text' => 
        "*Name:* $product->name $product->last_name \n" . 
        "*Total Paid:* R\$$product->price\n", 
       'mrkdwn_in' => ['text', 'pretext'] 
      )); 
     } 
    } catch(Exception $e){ 
     $this->message = "A exception occurred "; 
    } catch(\Exception $e){ 
     $this->message = "A exception occurred e"; 
    } catch(MyException $e){ 
     $this->message = "A exception occurred"; 
    } 
+0

Вы должны на самом деле выбросить исключение ... –

+0

'throw new Exception ('throw of exception ...');' https://secure.php.net/Exceptions –

+0

Я заставляю исключение. Я изменил $ products на null, после этой строки im, используя foreach. –

ответ

3

Прежде всего, вы должны понимать разницу между исключением и ошибки:

  1. http://php.net/manual/en/language.exceptions.php
  2. http://php.net/manual/en/ref.errorfunc.php

Попытка Foreach над нулевое значение не будет выдает исключение, но вызывает ошибку. Вы можете использовать обработчик ошибок, чтобы обернуть ошибку в виде исключения, как, например:

<?php 

function handle ($code, $message) 
{ 
    throw new \Exception($message, $code); 
} 

set_error_handler('handle'); 

// now this will fail 
try { 
    $foo = null; 
    foreach ($foo as $bar) { 
    } 
} catch(\Exception $e) { 
    echo $e->getMessage(); 
} 

Однако в вашем коде, вы можете просто проверить, если $ продуктов является нулевым, и если да, то сгенерирует исключение:

if (!$products) { 
    throw new \Exception('Could not find any products') 
} 
foreach($products as $product) { ... 
+0

. Превышение значения NULL не приведет к ошибке. PHP выдает предупреждение. –

+2

Глубоко, предупреждение - это просто ошибка с уровнем E_WARNING. Код будет работать в любом случае. Вы можете отслеживать только определенные типы ошибок, указав второй параметр функции set_error_handler() - http://php.net/manual/en/function.set-error-handler.php – motanelu

Смежные вопросы