Исключения php - throw / catch не работает через циклы - PullRequest
0 голосов
/ 10 января 2012

Это должно так работать. Пожалуйста, скажите мне, что я делаю что-то не так.

Вот код:

<?php
try {
  echo "start";
  throw new Exception("test");
  for ($index=0; $index < 1; $index++) {
    echo "loop";
  }
} catch ( Exception $e ){
  echo "caught $e";
}
?>

Я получаю неисследованное исключение, если я перемещаю бросок внутри петли, он работает нормально, но это противоречит моей цели. Я мог бы взломать отдельные блоки try / catch, но это уже взлом.

Я пробовал это на сервере 5.2.13 и 5.2.17. Текущий выпуск находится на уровне 5.2.17, и нет, я не тестировал его на 5.3.8, потому что мне нужно было получить от своего хоста обновление и повторно протестировать много кода.

Любая любовь?

P.S. Я знаю разницу между исключением и неперехваченным исключением. Но вот результат:

start
Fatal error: Uncaught exception 'Exception' with message 'test' in C:\UniServer\www\admin\water_ws\test.php:4 Stack trace: #0 {main} thrown in C:\UniServer\www\admin\water_ws\test.php on line 4

Ответы [ 2 ]

0 голосов
/ 11 января 2012

Как предположили лендоны, именно «оптимизация» eAccelerator оптимизировала мой блок улова. Как только я отключил eAccelerator, он работает как положено.

0 голосов
/ 10 января 2012

почему вы повторяете $e объект?попробуйте это:

try {
    throw new Exception("test");
    for ($index=0; $index < 1; $index++) {
        echo "loop";
    }
} catch ( Exception $e ){
    echo $e->getMessage();
}
...