Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 16.07.2017 18:25:11

не пойму, как это работает

Версия Laravel: 5.2
Версия PHP: 5.6

в сервис-провайдере \Illuminate\Auth\AuthServiceProvider
не пойму как работает следующий код:
Код:

protected function registerAuthenticator()
    {
        $this->app->singleton('auth', function ($app) {
            $app['auth.loaded'] = true;
            return new AuthManager($app);
        });

        $this->app->singleton('auth.driver', function ($app) {
            return $app['auth']->guard();
        });
    }

А именно: почему после первого return

return new AuthManager($app);

продолжает выполняться код:

$this->app->singleton('auth.driver', function ($app) {
            return $app['auth']->guard();
        });

я не такой уж и новичек в php, но сейчас я в ступоре. Буду благодарен даже легкому намеку.

Изменено Yurri_87 (16.07.2017 18:27:37)

Не в сети

#2 16.07.2017 20:10:02

Re: не пойму, как это работает

return находится в замыкании (closure). В методе registerAuthenticator() просто регистрируются два синглтона. Прочитай доки про контейнер (IoC Container), примеры там тоже есть.

Не в сети

#3 16.07.2017 20:20:56

Re: не пойму, как это работает

Про ioc контейнер и регистрации понятно.
Буду читать про замыкание, спасибо. Думал метод должен обрываться. Оказалось плохо ООП знаю.

Не в сети

#4 16.07.2017 22:19:15

Re: не пойму, как это работает

Дополню для общей эрудиции:

http://php.net/manual/ru/function.return.php
http://php.net/manual/ru/functions.returning-values.php

return возвращает управление программой модулю, из которого была вызвана функция. Выполнение программы продолжается с инструкции, следующей за местом вызова.

Не в сети

#5 17.07.2017 12:09:33

Re: не пойму, как это работает

return возвращает управление программой модулю, из которого была вызвана функция. Выполнение программы продолжается с инструкции, следующей за местом вызова

Ну да, а там их целых две: сначала после return выходим из безымянной функции, выполнение продолжается в метод/функцию (ведь нет разницы с точки зрения областей видимости?) синглтон. Тоесть там "двойная стенка, защищающая от обрыва" метод registerAuthenticator().
Программирование такая штука что надо стабильно кодить, чтобы через месяц-другой не спотыкаться о вещи, которые раньше не доставляли проблем. А значит нужно зарабатывать $, а не просто увлекаться.

Изменено Yurri_87 (17.07.2017 13:02:09)

Не в сети

Подвал раздела