मैं यह पता लगाने की कोशिश कर रहा हूं कि app->bind
और app->singleton
के बीच का अंतर क्या है जब लैरावेल में सेवा प्रदाता की स्थापना की जाती है। मैं इस धारणा के तहत था कि अगर मैं singleton
पंजीकृत करता हूं तो यह ऑब्जेक्ट का एक ही उदाहरण वापस लौटाएगा जब इसे बनाम bind
कहा जाता है जो एक नया उदाहरण होगा।लारवेल अंतर 'ऐप-> बाइंड' और 'ऐप-> सिंगलटन' के बीच?
यहाँ सरल उदाहरण है:
फसाड:
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;
});
}
}
कक्षा:
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');
और रन है कि हम foo
साथ bind
और singleton
के बीच उचित व्यवहार देखेंगे एक बार क्रमश: दो बार बाहर मुद्रित किया जा रहा है और फिर। लेकिन अगर हम ऐसा तरह मुखौटा के माध्यम से चलाने:
Data::set('test', 'test');
Data::set('cheese', 'cheese');
मैं दोनों test
और cheese
उपलब्ध होने की उम्मीद होती है और जब यह एक bind
है मुझे यकीन है कि मैं क्या माध्यम से उपलब्ध होने की अपेक्षा करेंगे नहीं कर रहा हूँ यह एक सिंगलटन है जब मुखौटा, लेकिन ऐसा लगता है कि कोई फर्क नहीं पड़ता है।
यह सब कुछ singleton
के रूप में व्यवहार करने का मुखौटा है?
आप पहले से ही अंतर जानते हैं! –
आपने 'बाइंड 'का उल्लेख किया है - लेकिन आपका प्रश्न कभी भी बाध्य नहीं करता है। –
लेकिन क्या मुखौटा सेवा प्रदाता को कॉल नहीं करता है जो बांधता है? – Rob