Ich habe versucht herauszufinden, was der Unterschied zwischen app->bind
und app->singleton
bei der Einrichtung eines Dienstleisters in Laravel sind. Ich hatte den Eindruck, dass, wenn ich ein singleton
registriere, es die gleiche Instanz des Objekts jedes Mal zurückgeben würde, wenn es vs bind
aufgerufen wurde, was eine neue Instanz wäre. HierLaravel Difference `zwischen app-> bind` und` app-> singleton`?
ist einfaches Beispiel:
Fassade:
use Illuminate\Support\Facades\Facade;
class DataFacade extends Facade
{
protected static function getFacadeAccessor() {
return 'Data';
}
}
Serviceprovider:
use Illuminate\Support\ServiceProvider;
class DataServiceProvider extends ServiceProvider
{
public function register() {
$this->app->singleton('Data', function() {
return new Data;
});
}
}
Klasse:
class Data
{
public $data = [];
public function get($key)
{
return isset($this->data[$key]) ? $this->data[$key] : null;
}
public function set($key, $val)
{
$this->data[$key] = $val;
}
}
Wenn wir so etwas wie:
$instance = App::make('Data');
$instance->set('foo', 'foo');
$instance2 = App::make('Data');
echo $instance->get('foo');
echo $instance2->get('foo');
und führt, dass wir das richtige Verhalten zwischen bind
und singleton
mit foo
wird einmal ausgedruckt und dann jeweils zweimal sehen. Aber wenn wir es durch die Fassade laufen wie folgt:
Data::set('test', 'test');
Data::set('cheese', 'cheese');
Wenn es ein Singletons würde ich beide test
und cheese
erwarten verfügbar zu sein, und wenn es ein bind
ist Ich bin nicht sicher, was ich erwarten würde über zur Verfügung stehen die Fassade, aber es scheint, als gäbe es keinen Unterschied.
Es ist die Fassade, die alles als singleton
behandelt?
Sie kennen den Unterschied bereits! –
Du hast 'bind' erwähnt - aber deine Frage ruft nie direkt an bind. –
Aber ruft die Fassade nicht den Dienstanbieter an, der Anrufe bindet? – Rob