永恒forever 发表于 2013-2-21 09:12:53

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

为什么是:

function &load_class() {}

函数调用:

$_error =& load_class('Exceptions', 'core');



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

请问为什么要使用引用?

Hex 发表于 2013-2-21 09:53:18

因为需要使用引用传递呀。
你去掉也正常,那只是碰巧,呵呵

jeongee 发表于 2013-2-21 10:00:32

据说是兼容 php < 5.3 的

永恒forever 发表于 2013-2-21 12:46:55

Hex 发表于 2013-2-21 09:53 static/image/common/back.gif
因为需要使用引用传递呀。
你去掉也正常,那只是碰巧,呵呵

我的版本是 5.4 我不知道是不是为了兼容低版本。我的理解是,假设函数 return new Foo(),那么返回的本身就是引用,再加一个取地址符不是多此一举吗?

永恒forever 发表于 2013-2-21 12:49:58


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);


我上面的代码也完全能达到预期的效果。当然加了 & 也是一样的结果。那还是这个问题,为什么要用引用?

永恒forever 发表于 2013-2-21 12:51:34

jeongee 发表于 2013-2-21 10:00 static/image/common/back.gif
据说是兼容 php < 5.3 的

待会试试低版本的的PHP,看去掉 & 是否也能正常运行。

Hex 发表于 2013-2-21 13:35:00

呵呵,我之前说的不太准确,应该是 @jeongee 老大说的对,为了兼容低版本。
属于历史遗留问题。
页: [1]
查看完整版本: Common.php 里的 load_class 函数为什么要使用引用