function &get_instance()
{
return CI_Controller::get_instance();
}
这个CI_Controller::get_instance(); 不需要加&么?
return &CI_Controller::get_instance();
这样
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的本意是相违背的吧?
当前类的实例的引用和引用类的实例是不一样的,$this是前者,(&$this)或者(&某一个实例)是后者
页:
1
[2]