Diferença do Laravel `entre app-> bind` e` app-> singleton`?

Eu tenho tentado descobrir qual é a diferença entreapp->bind eapp->singleton são ao configurar um provedor de serviços no Laravel. Fiquei com a impressão de que se eu registrar umsingleton retornaria a mesma instância do objeto toda vez que fosse chamado vsbind o que seria uma nova instância.

Aqui está um exemplo simples:

Fachada:

use Illuminate\Support\Facades\Facade;

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

Provedor de serviço:

use Illuminate\Support\ServiceProvider;

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

Classe:

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

Se fizermos algo como:

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

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

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

E corra que veremos o comportamento apropriado entrebind esingleton comfoo sendo impresso uma e duas vezes, respectivamente. No entanto, se passarmos pela fachada da seguinte forma:

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

Quando é um singleton, eu esperaria que ambostest echeese estar disponível e quando é umbind Não tenho certeza do que eu esperava estar disponível pela fachada, mas parece que não há diferença.

É a fachada tratando tudo como umsingleton?

questionAnswers(1)

yourAnswerToTheQuestion