За последние 24 часа нас посетили 22787 программистов и 1238 роботов. Сейчас ищут 829 программистов ...

Проброс исключения

Тема в разделе "PHP для новичков", создана пользователем Bazil82, 8 сен 2017.

  1. Bazil82

    Bazil82 Новичок

    С нами с:
    8 сен 2017
    Сообщения:
    16
    Симпатии:
    1
    Здравствуйте, встретился следующий код
    PHP:
    1. function foo($var = false){
    2.     try{
    3.         bar();
    4.         echo "Good<br>";
    5.     }catch(Exception $e){
    6.         echo $e->getMessage();
    7.     }  
    8. }
    9. function bar(){
    10.     baz();  
    11. }
    12. function baz(){
    13.     if(!$var)
    14.         throw new Exception("Bad<br>");
    15. }
    Как несложно догадаться следующий вызов:
    PHP:
    1. var_dump(foo(), foo(1));
    в обоих случаях вернет false, что и не удивительно ведь baz() не видит аргумента функции foo(). Описать аргумент $var в baz() тоже не вариант т.к. это будет уже другой аргумент. Так как сделать так чтобы baz() увидел аргумент foo()?
     
  2. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    либо передать аргумент дальше, либо использовать замыкания внутри foo:
    PHP:
    1. function foo($var = false){
    2.     $baz = function () use ($var) { /*... */ }
    3.     $bar = function () use ($var, $baz) {$baz()}
    4.     try{
    5.         $bar();
    6.         echo "Good<br>";
    7.     }catch(Exception $e){
    8.         echo $e->getMessage();
    9.     }  
    10. }
     
  3. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.632
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Скажи пожалуйста, каким образом этот код при выполнении должен вернуть false?
     
  4. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    Ох тыж.
    Кури пыху, братан.
    Область видимости твоей переменной $var лишь в функции foo().
    Удачи.
     
  5. Bazil82

    Bazil82 Новичок

    С нами с:
    8 сен 2017
    Сообщения:
    16
    Симпатии:
    1
    Братан, я в курсе)
    --- Добавлено ---
    false == Bad
    опечатка вышла)