В Pimple 1.0 я имел обыкновение делиться экземплярами классов вот так:
$app['some_service'] = $app->share(function () {
return new Service();
});
Сейчас это кажется устаревшим, и я не могу найти новый способ сделать это.
В Pimple 1.0 (Silex 1) вы делаете это:
$app['shared_service'] = $app->share(function () {
return new Service();
});
$app['non_shared_service'] = function () {
return new Service();
};
В Pimple 3.0 (Silex 2) вы делаете это (что противоположно!):
$app['shared_service'] = function () {
return new Service();
};
$app['non_shared_service'] = $app->factory(function () {
return new Service();
});
Кажется, что pimple 3.0 (который использует Silex 2.0) по умолчанию всегда возвращает один и тот же экземпляр службы. Вы должны быть откровенными об этом и использовать фабричную функцию, если вы не хотите такого поведения.
Зависит от версии Pimple!
На прыщ 1.0
$container['shared'] = $container->shared(function(){
return new Class();
});
$container['non_shared'] = function() {
return new Class();
};
На прыщ 3.0
$container['shared'] = function() {
return new Class();
};
$container['non_shared'] = $container->factory(function() {
return new Class();
});
Помните, что при создании общего сервиса их возврат не изменится. Когда вы создаете не разделяемый сервис, каждый раз, когда вы используете, Pimple будет предоставлять вам новый экземпляр этого сервиса.