4

Laravel の仕組みを理解したいので、Laravel のコアを掘り下げてきました。しかし、3日経っても頭を包み込めない方法を思いつきました。start.php では、アプリはそれ自体にバインドされています。ここまでは順調ですね。しかし、 $app->share メソッドを確認すると、道に迷ってしまいます。

    public function share(Closure $closure)
{
    return function($container) use ($closure)
    {

        // We'll simply declare a static variable within the Closures and if
        // it has not been set we'll execute the given Closure to resolve
        // the value and return it back to the consumers of the method.
        static $object;
        if (is_null($object))
        {
            $object = $closure($container);
        }

        return $object;
    };
}

このメソッドは、実行時にアプリのインスタンスを返す匿名関数を返します。私はそれを正しく見ますか?どうしてこれなの?インスタンスだけでなく、クロージャーを返したいのはなぜですか。これは奇妙な方法のように思えますが、それには理由があると確信しています ;) ??

更新 start.php の行:

$app['app'] = $app->share(function($app) { return $app; });

したがって、 $app['app'] はクロージャー オブジェクトだと思います。ただし、 get_class を実行すると、クラスは Illuminate\Foundation\Application になります。さらに、 $app'app' は明らかに機能しないため、実行する方法もありません。

4

1 に答える 1