用户
 找回密码
 入住 CI 中国社区
搜索
查看: 1463|回复: 3
收起左侧

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

[复制链接]
发表于 2015-8-19 19:28:44 | 显示全部楼层 |阅读模式
CI框架中CodeIgniter.php文件中第39行
self:instance =& $this;
是&$this什么意思?&$this如何理解?$this不也是引用么?为什么不直接用self:instance = $this;???
发表于 2015-8-20 01:55:13 | 显示全部楼层
引入单例模式,具体什么是单例模式自己好好百度学一下。带&是传值方式而不是赋值,因为这里的$this的修改和新增需要全局一致不能创建多了单例这就是单例的精髓。
 楼主| 发表于 2015-8-20 18:45:26 | 显示全部楼层
gogogo1027 发表于 2015-8-20 01:55
引入单例模式,具体什么是单例模式自己好好百度学一下。带&是传值方式而不是赋值,因为这里的$this的修改和 ...

抱歉,我还是不理解为什么不直接用
PHP复制代码
self:instance = $this;
复制代码
而必须用
PHP复制代码
self:instance =& $this;
复制代码
???
发表于 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,我演示给你。


本版积分规则