Laravel Разница между app-> bind` и app-> singleton`?

Я пытался выяснить, в чем разница междуapp->bind а такжеapp->singleton находятся при настройке поставщика услуг в Laravel. У меня сложилось впечатление, что если я зарегистрируюsingleton он будет возвращать один и тот же экземпляр объекта каждый раз, когда он был вызванbind который был бы новым экземпляром.

Вот простой пример:

Фасад:

use Illuminate\Support\Facades\Facade;

class DataFacade extends Facade
{
    protected static function getFacadeAccessor() { 
        return 'Data';
    }
}

Поставщик услуг:

use Illuminate\Support\ServiceProvider;

class DataServiceProvider extends ServiceProvider
{
    public function register() {
        $this->app->singleton('Data', function() {
            return new Data;
        });
    }
}

Учебный класс:

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;
    }
}

Если мы сделаем что-то вроде:

$instance = App::make('Data');
$instance->set('foo', 'foo');

$instance2 = App::make('Data');

echo $instance->get('foo');
echo $instance2->get('foo');

И запустить, что мы увидим соответствующее поведение междуbind а такжеsingleton сfoo распечатывается один и два раза соответственно. Однако, если мы запустим его через фасад, вот так:

Data::set('test', 'test');
Data::set('cheese', 'cheese');

Когда это синглтон, я бы ожидал, что обаtest а такжеcheese быть доступным и когда этоbind Я не уверен, что я ожидал быть доступным через фасад, но кажется, что нет никакой разницы.

Это фасад, рассматривающий все какsingleton?

Ответы на вопрос(1)

Ваш ответ на вопрос