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?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage