场景
use Illuminate\Support\Facades\Log;
第一种写法
public function xf()
{
$data = User::get();
foreach ($data as $item)
{
Log::channel('info')->info('user_id:'.$item['id']);
}
}
第二种写法
public function xf()
{
$data = User::get();
$log = new Log();
foreach ($data as $item)
{
$log::channel('info')->info('user_id:'.$item['id']);
}
}
两种写法的区别
第一种写法 在auto_load的时候,只会加载一次类,不管怎么写,都是引用原来加载的内存。 所以第二种写法在foreach的时候不会每次都实例化。
laravel 绑定一个单例对象的时候则用下面的方式:
$app->singleton('test', \System\test::class);
facades 为应用程序的服务容器(service conatiner)中的基础类(service provider)提供了一个静态接口,它作为ioc容器(服务容器)中基础类的代理。
在Laravel中的应用 在laravel bootstrap/app.php 文件中,可以看到几行类似如下的代码。 这就是在laravel的容器中注册了几个核心类的单例。 当然你也可以自己在 app/Providers 中写一个单例的服务。
$app->singleton(
Illuminate\Contracts\Http\Kernel::class,
App\Http\Kernel::class
);
第二种写法的好处 类赋值给了变量,当修改了类名后只需在一处修改无需处处修改。
|