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
?