我希望从Laravel 4.2到5.5重构现有代码。原始程序员对他们所有的ServiceProviders都有类似的东西:
use App\UI\Alerts;
class AlertsProvider extends ServiceProvider
{
public function register()
{
$this->app->singleton('Alerts', function ($app) {
return new Alerts;
});
$this->app->singleton('App\UI\Alerts', function ($app) {
return $app->make('Alerts');
});
}
}
第二个单身人士的目的是什么?需要吗?
注意......我的背景不是PHP。
答案 0 :(得分:1)
Laravel在提供程序中使用$this->app->singleton()
将字符串别名化为实现,最常见的是将接口映射到具体对象。这两个陈述不同,因为'Alerts'
与'App\UI\Alerts'
的值不同。
$this->app->singleton('Alerts', function ($app) {
return new Alerts;
});
允许你这样做
$alerts = app('Alerts');
尽管
$this->app->singleton('App\UI\Alerts', function ($app) {
return $app->make('Alerts');
});
允许您这样做
$alerts = app('App\UI\Alerts');
对于完整的类路径,这通常也与::class
结合使用。
use App\UI\Alerts;
$alerts = app(Alerts::class);
答案 1 :(得分:0)
我看到的是那些警报是2个不同的类,因为它们的命名空间不匹配,所以我建议你仔细看看它们两个并查看它们之间的区别。