2013-05-13 2 views
-1

У меня есть этот кусок коды:предупреждение вместо исключения php?

 

    try 
    { 
     foreach($obj_c->getGalleries($db_conn1) as $gallery) 
       { 
      $gallery->Save($db_conn1); 
     } 
     $k = 0; 
     $testing_the_exception = 15/$k; 
       //settin status to 1... 
     $obj_c->set_exec_status(3, 1, $db_conn1); 
    } 
    catch (Exception $e) 
    { 
     //settin status to 3... 
    $obj_c->set_exec_status(3, 3, $db_conn1); 
    echo 'Caught exception: ', $e->getMessage(), "\n"; 
    } 
    unset($obj_c); 
 

Дело в том, что он должен входить в сточных части, из-за деления на ноль исключения, но вместо этого он просто выскакивает предупреждение и продолжает устанавливать статус 1. Это ожидаемое поведение? Заранее большое спасибо.

+0

Нечто подобное (? Или даже то же самое) к тому, что вы обсуждаются [здесь] (http://stackoverflow.com/questions/1241728/can-i-try-catch-a-warning) – undefined

ответ

1

Thats, потому что деление на 0 является предупреждением в php, а не исключением. Лучший способ поймать это - проверить его и бросить свое собственное исключение.

if($k == 0) 
    throw new Exception("Division by zero"); 
$testing_the_exception = 15/$k; 
+0

Большое спасибо людям. дело в том, что это был всего лишь тест, и мне действительно нужно увидеть, выбрал ли (например) - $ gallery-> Save ($ db_conn1) исключение. В этом случае я должен изменить статус --in $ obj_c-> set_exec_status (X, 3, $ db_conn1) - на 1 или 3, в зависимости от того, было ли инициировано исключение. Как еще я могу узнать, была ли ошибка в этой итерации. Thx снова. – rrubiorr81

3

Это больше опционное решение. Настройка сообщений об ошибках, чтобы бросить исключение:

<?php 
function exception_error_handler($errno, $errstr, $errfile, $errline) { 
    throw new ErrorException($errstr, $errno, 0, $errfile, $errline); 
} 
set_error_handler("exception_error_handler"); 

/* Trigger exception */ 
strpos(); 
?> 

Это пример из set_error_handler документации по php.net

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