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' は明らかに機能しないため、実行する方法もありません。