l585826 发表于 2015-8-19 19:28:44

CI框架中CodeIgniter.php文件中& $this如何理解?

CI框架中CodeIgniter.php文件中第39行
self::$instance =& $this;
是&$this什么意思?&$this如何理解?$this不也是引用么?为什么不直接用self::$instance = $this;???

gogogo1027 发表于 2015-8-20 01:55:13

引入单例模式,具体什么是单例模式自己好好百度学一下。带&是传值方式而不是赋值,因为这里的$this的修改和新增需要全局一致不能创建多了单例这就是单例的精髓。

l585826 发表于 2015-8-20 18:45:26

gogogo1027 发表于 2015-8-20 01:55
引入单例模式,具体什么是单例模式自己好好百度学一下。带&是传值方式而不是赋值,因为这里的$this的修改和 ...

抱歉,我还是不理解为什么不直接用self:instance = $this;而必须用self:instance =& $this;???

gogogo1027 发表于 2015-8-21 21:11:03

l585826 发表于 2015-8-20 18:45
抱歉,我还是不理解为什么不直接用而必须用???

说个很简单的例子,解释传指与赋值的区别。
假如你在一个helper里面引入CI的单例:
$CI = get_instance(); //这个就是CI模型里的$this.
$CI->load->model('user_model');
$data = $CI->user_model->do_something();


这个时候,如果你使用的是 $CI = get_instance();
则后面的其他控制器里你不能直接使用$this->user_model->do_something(),而必须重新加载这个模型并实例化。这个$CI 实际上已经是第二个单例了
而如果你一开始的时候使用$CI =& get_instance();这就代表$this是传址给$CI,$CI的所有改动都其实是$this的改动,全局可用,保证一个单例。
如果还不清楚可以加我QQ:349703434,我演示给你。


页: [1]
查看完整版本: CI框架中CodeIgniter.php文件中& $this如何理解?