yj5386585 发表于 2015-9-10 11:47:42

CodeIgniter.php里面的
function &get_instance()
{
      return CI_Controller::get_instance();
}


这个CI_Controller::get_instance(); 不需要加&么?

return &CI_Controller::get_instance();

这样


yj5386585 发表于 2015-9-10 16:36:57

Hex 发表于 2013-5-21 13:46
你说的都不错,但是你没有注意 get_instance 的使用场景,这个方法并不是用在控制器中的。
而是用在控制器 ...

确实应该是应该 return &CI_Controller::get_instance(); 这么写吧?

我写了下面的例子
<?php
error_reporting(E_ALL);
class A
{
        public $i = 0;
        static $instance;
        public static function &getInstance()
        {
                if (is_null(self::$instance)) {
                        self::$instance = new A();
                }
                return self::$instance;
        }
}

$aa = A::getInstance();
A::$instance = null;
var_dump($aa->i);        //正常,说明$aa是A的副本

$bb = &A::getInstance();
A::$instance = null;
var_dump($bb->i);        //报错 Notice: Trying to get property of non-object, 证明$bb是引用




可见如果不加&的话,虽然在调用$CI = &get_instance();的时候是引用,但是在get_instance这个方法里面却返回的是CI实例的副本了,这应该和CI的本意是相违背的吧?

sksk 发表于 2016-1-4 16:29:20

当前类的实例的引用和引用类的实例是不一样的,$this是前者,(&$this)或者(&某一个实例)是后者
页: 1 [2]
查看完整版本: 关于 $CI = &get_instance() 求指教