2016-01-12 1 views
6

にきび1.0で私はこのようなクラスのインスタンスを共有できるようにするために使用:シンプルなDIシェアは値下がりしました。それで?

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

これは現在推奨しているようだと、私はこれを行うための新しい方法であるものを見つけることができません。

+1

http://pimple.sensiolabs.org/に文書化されたコンテナシステムのように見えます。 – ceejayoz

答えて

11

、あなたがこれを行う:にきび3.0で

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

$app['non_shared_service'] = function() { 
    return new Service(); 
}; 

(サイレックス2)あなたは(反対している!)この操作を行う:の

$app['shared_service'] = function() { 
    return new Service(); 
}; 

$app['non_shared_service'] = $app->factory(function() { 
    return new Service(); 
}); 
1

シンプル3.0(Silex 2.0が使用する)では、デフォルトで常に同じサービスインスタンスが返されるようです。この動作を望まない場合は、明示的にファクトリ関数を使用する必要があります。にきび1.0(サイレックス1)では

1

のDependsピンプルバージョン!にきび3.0

でにきび1.0

$container['shared'] = $container->shared(function(){ 
    return new Class(); 
}); 
$container['non_shared'] = function() { 
    return new Class(); 
}; 

$container['shared'] = function() { 
    return new Class(); 
}; 
$container['non_shared'] = $container->factory(function() { 
    return new Class(); 
}); 

覚えて、あなたが共有サービスを作成するとき、彼らは変更されません返すものを。あなたが非共有サービスを作成するとき、あなたが使うたびに、ピンプルはそれに新しいサービスのインスタンスを提供します。