@semki096

Чем отличаются эти две почти идентичные функции?

Подключил к SlimPHP библтотеку Eloquent. Получаю обьект с данными базы данных и помещаю этот обьект в контейнер.
1 способ
$container['db'] = function ($container) {
    $capsule = new \Illuminate\Database\Capsule\Manager;
    $capsule->addConnection($container['settings']['db']);

    $capsule->setAsGlobal();
    $capsule->bootEloquent();

    return $capsule;
};


2 способ
$capsule = new \Illuminate\Database\Capsule\Manager;
$capsule->addConnection($container['settings']['db']);
$capsule->setAsGlobal();
$capsule->bootEloquent();
//pass the connection to global container (created in previous article)
$container['db'] = function ($container) use ($capsule){
   return $capsule;
};


В чем здесь отличие? Интересно что во втором варианте я могу написать
$user = User::find(1);
var_dump($user);

А в первом эта запись вызовет ошибку что объекта User не существует. Буду признателен за разъяснение и помощь.
  • Вопрос задан
  • 1314 просмотров
Решения вопроса 2
Предполагаю, что в первом варианте замыкание (анонимная функция), в котором инициализируется все это дело, не вызывается на момент попытки вами обратиться к объекту User (к Eloquent). Вам сперва нужно произвести саму инициализацию, что вы и сделали в примере 2.
Ответ написан
Комментировать
@DanKud
В первом варианте вы вызываете объект класса внутри функции и использовать его можете соответственно только внутри функции. Во втором варианте вы вызываете объект класса в глобальном пространстве и передаете его в анонимную функцию.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы