Laravel Unterschied `zwischen app-> bind` und` app-> singleton`?
Ich habe versucht, herauszufinden, was der Unterschied zwischenapp->bind
undapp->singleton
sind beim Einrichten eines Dienstleisters in Laravel. Ich hatte den Eindruck, dass wenn ich ein @ registriesingleton
es würde bei jedem Aufruf von vs @ dieselbe Instanz des Objekts zurückgebbind
das wäre eine neue Instanz.
Hier ist ein 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 etwas machen wie:
$instance = App::make('Data');
$instance->set('foo', 'foo');
$instance2 = App::make('Data');
echo $instance->get('foo');
echo $instance2->get('foo');
Und führen Sie aus, dass wir das entsprechende Verhalten zwischen @ sehebind
undsingleton
mitfoo
wird einmal und dann zweimal ausgedruckt. Wenn wir es jedoch wie folgt durch die Fassade führen:
Data::set('test', 'test');
Data::set('cheese', 'cheese');
Wenn es ein Singleton ist, würde ich beide erwartentest
undcheese
verfügbar sein und wenn es ein @ ibind
Ich bin mir nicht sicher, was ich über die Fassade erwarten würde, aber es scheint, als gäbe es keinen Unterschied.
Es ist die Fassade, die alles wie ein @ behandesingleton
?