Я копал в ядре Laravel, потому что хотел бы понять, как это работает. Но я придумал метод, который я просто не могу окутать в голову даже через 3 дня. В start.php приложение привязывается к самому себе. Все идет нормально. Но когда я проверяю метод $ app-> share, я теряюсь.Laravel core method confusion
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;
};
}
Этот метод возвращает анонимную функцию, которая при выполнении возвращает экземпляр приложения. Правильно ли я это вижу? Почему это? Почему вы хотите вернуть закрытие, а не только экземпляр. Это кажется странным, но я совершенно уверен, что есть причина;) ??
UPDATE Строка в start.php:
$app['app'] = $app->share(function($app) { return $app; });
Так что я думаю, что $ приложение [ 'приложение'] является объектом закрытия. Однако, если я делаю get_class, класс Illuminate \ Foundation \ Application. Кроме того, нет возможности выполнить его, так как $ app'app 'не будет работать явно.
Это, кажется, комбинация шаблонов проектирования Singleton и Inversion of Control (IoC). Конечно, это для расширяемости, но я не уверен, почему он был построен именно так. –