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

Common.php 里的 load_class 函数为什么要使用引用

[复制链接]
发表于 2013-2-21 09:12:53 | 显示全部楼层 |阅读模式
为什么是:
PHP复制代码
 
function &load_class() {}
 
复制代码

函数调用:
PHP复制代码
 
$_error =& load_class('Exceptions', 'core');
 
复制代码



我将 & 去掉后,CodeIgniter 也能正常运行。

请问为什么要使用引用?
发表于 2013-2-21 09:53:18 | 显示全部楼层
因为需要使用引用传递呀。
你去掉也正常,那只是碰巧,呵呵
发表于 2013-2-21 10:00:32 | 显示全部楼层
据说是兼容 php < 5.3 的
 楼主| 发表于 2013-2-21 12:46:55 | 显示全部楼层
Hex 发表于 2013-2-21 09:53
因为需要使用引用传递呀。
你去掉也正常,那只是碰巧,呵呵

我的版本是 5.4 我不知道是不是为了兼容低版本。我的理解是,假设函数 return new Foo(),那么返回的本身就是引用,再加一个取地址符不是多此一举吗?
 楼主| 发表于 2013-2-21 12:49:58 | 显示全部楼层
PHP复制代码
 
class Foo {
        public $name;
        public function __construct() {
                $this->name = microtime(true);
        }
}
 
function get_instance($class) {
        static $_classes;
        if (isset($_classes[$class])) {
                return $_classes[$class];
        }
        $_classes[$class] = new $class();
        return $_classes[$class];
}
 
$f = get_instance('Foo');
var_dump($f);
$f2 = get_instance('Foo');
var_dump($f2);
 
$f->age = 35;
var_dump($f);
var_dump($f2);
 
复制代码


我上面的代码也完全能达到预期的效果。当然加了 & 也是一样的结果。那还是这个问题,为什么要用引用?
 楼主| 发表于 2013-2-21 12:51:34 | 显示全部楼层
jeongee 发表于 2013-2-21 10:00
据说是兼容 php < 5.3 的

待会试试低版本的的PHP,看去掉 & 是否也能正常运行。
发表于 2013-2-21 13:35:00 | 显示全部楼层
呵呵,我之前说的不太准确,应该是 @jeongee 老大说的对,为了兼容低版本。
属于历史遗留问题。

本版积分规则