За последние 24 часа нас посетили 27669 программистов и 1815 роботов. Сейчас ищут 1024 программиста ...

Исключения в ПХП

Тема в разделе "PHP для новичков", создана пользователем super-php, 6 апр 2013.

  1. super-php

    super-php Активный пользователь

    С нами с:
    8 мар 2013
    Сообщения:
    35
    Симпатии:
    0
    Не работает пример с исключениями с офиц. сайта ПХП.
    Код (Text):
    1.  
    2.  
    3. <?php
    4. function inverse($x) {
    5.     if (!$x) {
    6.         throw new Exception('Деление на ноль.');
    7.     }
    8.     else return 1/$x;
    9. }
    10.  
    11. try {
    12.     echo inverse(5) . "\n";
    13. } catch (Exception $e) {
    14.     echo 'Поймано исключение: ',  $e->getMessage(), "\n";
    15. } finally {
    16.     echo "Первое finally.\n";
    17. }
    18.  
    19. try {
    20.     echo inverse(0) . "\n";
    21. } catch (Exception $e) {
    22.     echo 'Поймано исключение: ',  $e->getMessage(), "\n";
    23. } finally {
    24.     echo "Второе finally.\n";
    25. }
    26.  
    27. // Продолжение нормального выполнения
    28. echo 'Hello World';
    29. ?>
    Parse error: syntax error, unexpected '{' in D:\server\super-php\test.ru\www\index.php on line 13
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.817
    Симпатии:
    1.333
    Адрес:
    Лень
    это для чего? у меня без них работает норм

    Добавлено спустя 7 минут 24 секунды:
    Код (Text):
    1. <?php
    2.  
    3. function inverse($x) {
    4.     if (!$x) {
    5.         throw new Exception('Деление на ноль.');
    6.     }
    7.     else return 1/$x;
    8. }
    9.  
    10. try {
    11.     echo "1) ".inverse(5)."<br>";
    12. } catch (Exception $e) {
    13.     echo '1) Поймано исключение: ',  $e->getMessage(), "<br>";
    14. }
    15.  
    16.  
    17. try {
    18.     echo "2) ".inverse(0)."<br>";
    19. } catch (Exception $e) {
    20.     echo '2) Поймано исключение: ',  $e->getMessage(), "<br>";
    21. }
    22.  
    23. // Продолжение нормального выполнения
    24. echo 'Hello World';
    25. ?>
    Добавлено спустя 13 минут 59 секунд:
    альтернатива:
    Код (Text):
    1. <?php
    2. function inverse($x) {
    3. $key = (($x)?1/$x:'Деление на ноль.');
    4. return $key;
    5. }
    6. echo inverse(5)."<br>";
    7. echo inverse(4)."<br>";
    8. echo inverse(3)."<br>";
    9. echo inverse(2)."<br>";
    10. echo inverse(1)."<br>";
    11. echo inverse(0)."<br>";
    12. ?>
    0.2
    0.25
    0.333333333333
    0.5
    1
    Деление на ноль.
    ))
     
  3. super-php

    super-php Активный пользователь

    С нами с:
    8 мар 2013
    Сообщения:
    35
    Симпатии:
    0
    Почему кэтч не ловит у меня исключение?

    Код (Text):
    1.  
    2. <?php
    3.  
    4. class MyException extends Exception { }
    5.  
    6. class Test {
    7.     public function testing($x) {
    8.         try {
    9.         echo 1/$x;    
    10.         } catch (MyException $e) {
    11.         echo $e->getMessage('Деление на ноль.');
    12.         }
    13. }
    14.  
    15. }
    16. $foo = new Test;
    17. $foo->testing(0);
    18.  
    19. ?>
     
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.817
    Симпатии:
    1.333
    Адрес:
    Лень
    тебе кэтч обязательно использовать?
     
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    А разве деление на ноль кидает эксепшн?
     
  6. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.817
    Симпатии:
    1.333
    Адрес:
    Лень
    Код (Text):
    1. О.О
    троллинг мозга
     
  7. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    } catch (MyException $e) {
    заменить на
    } catch (Exception $e) {

    Добавлено спустя 2 минуты 20 секунд:
    не, не помогло. не кидает деление на ноль эксепшн видимо.

    Добавлено спустя 1 минуту 14 секунд:
    в примере эксепшн кидается ручками:
     
  8. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.817
    Симпатии:
    1.333
    Адрес:
    Лень
    а судь в этом скрипте в чем? деление и все...?
     
  9. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Код (Text):
    1. php -v
    2. PHP 5.4.13 (cli) (built: Mar 25 2013 17:06:04)
    Код (Text):
    1. 0.2
    2. Поймано исключение: Деление на ноль.
    3. Hello World
    Код (PHP):
    1. <?php
    2. function inverse($x) {
    3.     if (!$x) {
    4.         throw new Exception('Деление на ноль.');
    5.     }
    6.     else return 1/$x;
    7. }
    8.  
    9. try {
    10.     echo inverse(5) . "\n";
    11. } catch (Exception $e) {
    12.     echo 'Поймано исключение: ',  $e->getMessage(), "\n";
    13. }
    14.  
    15. try {
    16.     echo inverse(0) . "\n";
    17. } catch (Exception $e) {
    18.     echo 'Поймано исключение: ',  $e->getMessage(), "\n";
    19. }
    20.  
    21. // Продолжение нормального выполнения
    22. echo 'Hello World';
     
  10. iliavlad

    iliavlad Активный пользователь

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    In PHP 5.5 and later, a finally block may also be specified after the catch blocks