За последние 24 часа нас посетили 20759 программистов и 1714 роботов. Сейчас ищут 1404 программиста ...

анонимные функции не передают родитель use

Тема в разделе "PHP для новичков", создана пользователем NoMonster, 26 июл 2016.

  1. NoMonster

    NoMonster Новичок

    С нами с:
    7 май 2016
    Сообщения:
    38
    Симпатии:
    1
    Написал код, но почему не передают переменую use в чем могут быть?


    PHP:
    1. <?php
    2. /**
    3. * @var \core\Router $router
    4. * @var \core\Request $request
    5. * @var \core\ui\Page $page
    6. */
    7.  
    8. use plugin\classes\Package;
    9. use plugin\classes\Plugin;
    10.  
    11.  
    12. var_dump($router); // тут работает
    13.  
    14. /**
    15. * @param string $name
    16. * @return false|Plugin
    17. */
    18. function plugin(string $name) use ($router)  {
    19.     static $package;
    20.     if(!$package) {
    21.         $package = new Package([
    22.             'dir' => __DIR__ . '/components'
    23.         ]);
    24.         $package->init();
    25.     }
    26.  
    27. var_dump($router); // тут не работает
    28.  
    29.     /**
    30.      * @var Plugin $component
    31.      */
    32.     if(!$component = $package->findComponent($name)) {
    33.         return false;
    34.     }
    35.  
    36.     return $component;
    37. }

    Ошибка нет но место белая страница как будто переменая router и лдругих не видит, но когда пишеш не в функции то работает.
     
  2. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Это весь код? Где объявили $router?
     
  3. NoMonster

    NoMonster Новичок

    С нами с:
    7 май 2016
    Сообщения:
    38
    Симпатии:
    1
    его передали уже через вызовд $router = new Router() в класс а потом как подключил к файл то
    extract() вызвал. к примеру делать $plugin = function(string $name) use ($router) так работает а если так function plugin (string $name) use ($router) то не работет чем в разницу?
     
  4. NoMonster

    NoMonster Новичок

    С нами с:
    7 май 2016
    Сообщения:
    38
    Симпатии:
    1
    Короче добавил global как то... Но не хотел его узать!
     
  5. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.584
    Симпатии:
    1.762
    Потому что вот это:
    PHP:
    1.  $plugin = function(string $name) use ($router)
    анонимная функция, а
    Код (Text):
    1. function plugin (string $name) use ($router)
    не анонимная
     
    denis01 нравится это.
  6. NoMonster

    NoMonster Новичок

    С нами с:
    7 май 2016
    Сообщения:
    38
    Симпатии:
    1
    @mkramer, уже понял забываю =)