2013-12-06 6 views
0

С помощью следующего кода я пытаюсь подсчитать -0.25, -0.333, -0.5, -1, исключить исключение, а затем продолжить подсчет 1, 0.5, 0.333, 0.25.PHP Try and Catch Exception

До сих пор я получаю исключение, тогда я не могу понять, как продолжить подсчет.

function inverse($x) 
{ 
    if (!$x) { 
     throw new Exception('Division by zero.'); 
    } 
    else return 1/$x; 
} 

try { 
    for ($i=-4; $i<=4; $i++) { 
     echo inverse($i) . "\n<br>"; 
     } 
} 

catch (Exception $e) { 
    echo 'Caught exception: ', $e->getMessage(), "\n<br>"; 

} 

// Continue execution 
echo 'Hello World'; 

?> 

Я попытался добавить echo inverse(-$i) . "\n<br>"; в TRY части, без успеха. Он продолжает подсчет, но не исключает исключения.

Любые предложения?

Спасибо!

ответ

2

Ваш улов находится вне цикла for, поэтому, как только исключение поймано, конец цикла завершается.

Попробуйте

for ($i=-4; $i<=4; $i++) { 
    try { 
     echo inverse($i) . "\n<br>"; 
    } catch (Exception $e) { 
     echo 'Caught exception: ', $e->getMessage(), "\n<br>"; 
    } 
} 

вместо этого.

+0

Спасибо за помощь. Это отлично поработало. – CoPoPHP

0

Поместите try|catch внутри цикла:

for ($i=-4; $i<=4; $i++) { 
    try { 
     echo inverse($i) . "\n<br>"; 
    } catch (Exception $e) { 
     echo 'Caught exception: ', $e->getMessage(), "\n<br>"; 
    } 
} 
0

Или просто изменить свой код так:

function inverse($x) 
    { 
     if (!$x) { 
      return 'Division by zero.'; 
     } 
     else return 1/$x; 
    } 

    try { 
     for ($i=-4; $i<=4; $i++) { 
      echo inverse($i) . "\n<br>"; 
      } 
    } 

    catch (Exception $e) { 
     echo 'Caught exception: ', $e->getMessage(), "\n<br>"; 

    } 

    // Continue execution 
    echo 'Hello World'; 

    ?>