laravel singleton和bind方法的区别

2020-02-19 23:58:51

参考地址 laravel学习笔记(七)singleton和bind方法的区别

singleton和bind都是返回一个类的实例,不同的是singleton是单例模式,而bind是每次返回一个新的实例。

1、singleton

1
2
3
4
5
6
7
8
9
10
class fun {
    public $strKey;
}
 
app()->singleton('fun', fun::class);
$fun1 = app()->make('fun');
$fun2 = app()->make('fun');
$fun1->strKey = "fun1";
$fun2->strKey = "fun2";
echo $fun1->strKey . '  ' $fun2->strKey;

  最后获取到的结果是fun2 fun2

2、bind

1
2
3
4
5
6
7
8
9
10
class fun {
    public $strKey;
}
 
app()->bind('fun', fun::class);
$fun1 = app()->make('fun');
$fun2 = app()->make('fun');
$fun1->strKey = "fun1";
$fun2->strKey = "fun2";
echo $fun1->strKey . '  ' $fun2->strKey;

  最后获取到的结果是fun1 fun2

再看框架底层代码:

1
2
3
4
public function singleton($abstract$concrete = null)
{
    $this->bind($abstract$concrete, true);
}

发现singleton方法其实也是调用bind方法,只是最后一个参数是true,表示单例模式。框架源代码:Illuminate/Container/Container.php


  • 2023-08-19 18:57:08

    强制杀死nginx进程简单粗暴

    nginx: [error] open() "/run/nginx.pid" failed (2: No such file or directory),最简单的办法,杀死nginx进程,重启