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

[已解决] 请教:怎么理解这个函数调用前面的&

[复制链接]
发表于 2011-4-5 21:51:11 | 显示全部楼层 |阅读模式
看CI的源码:在common.php文件中定义了 function is_loaded($class = '')
在Controller.php中有构造函数中有这样调用 $this->load->_base_classes =& is_loaded();
请问函数调用前面的&还需要么
发表于 2011-4-5 22:09:32 | 显示全部楼层
本帖最后由 jeongee 于 2011-4-5 22:13 编辑

返回的是静态变量$_is_loaded的引用,应该是需要的(可以了解一下PHP变量的作用域吧,里面有将static的作用),这样就不需要在让其他地方更改$_is_loaded的值的时候,还要再一次进行一次$this->load->_base_classes = is_loaded();的操作了
 楼主| 发表于 2011-4-5 22:45:43 | 显示全部楼层
谢谢版主的回复,我觉得要返回静态变量$_is_loaded的引用,需要在函数定义前面也加上&,就是
function &is_loaded($class = ''),而在源码里面并没有加&,不知道是不是我误解了
发表于 2011-4-5 23:05:43 | 显示全部楼层
本帖最后由 jeongee 于 2011-4-5 23:08 编辑

不需要的吧,即使function &is_loaded($class = '')
也只有这样& is_loaded();调用才会得到引用的。
另外,即使在is_loaded函数中写return &$_is_loaded;也是可以的
发表于 2011-4-25 19:28:37 | 显示全部楼层
函数名本身就已经是地址了吧?
 楼主| 发表于 2011-4-25 20:59:24 | 显示全部楼层
本帖最后由 jaka 于 2011-4-25 21:01 编辑

现在我已经明白了,函数前面加上&只是“引用了”函数is_loaded()返回的结果。而函数is_loaded在定义的时候前面没有加&,所以调用is_loaded(),返回的结果只是静态变量$_is_loaded的拷贝
最后的结果是,$this->load->_base_classes“引用了”静态变量$_is_loaded的一份拷贝

本版积分规则