Php 解释$CI=&;获取_实例();

Php 解释$CI=&;获取_实例();,php,codeigniter,Php,Codeigniter,查看codeigniter的源代码 在它的助手函数中,我一直看到代码 $CI=&get_instance() 有人能给我解释一下这个代码是如何工作的吗 我知道它正在返回对$CI超级对象的引用,但是get\u instance()从何而来?get\u instance()是在CodeIgniter的核心文件中定义的函数。当您在超级对象之外的范围内时,可以使用它来获取对CodeIgniter超级对象的单例引用 我很确定它是在base.php或类似的东西中定义的。它基本上是一种使用函数而不是静态方法的

查看codeigniter的源代码

在它的助手函数中,我一直看到代码
$CI=&get_instance()
有人能给我解释一下这个代码是如何工作的吗

我知道它正在返回对$CI超级对象的引用,但是
get\u instance()
从何而来?

get\u instance()是在CodeIgniter的核心文件中定义的函数。当您在超级对象之外的范围内时,可以使用它来获取对CodeIgniter超级对象的单例引用

我很确定它是在base.php或类似的东西中定义的。

它基本上是一种使用函数而不是静态方法的方法

要深入了解,请查看

所以基本上,它不强制执行单例,但它是一个公共函数的快捷方式

编辑:事实上,现在我明白了。为了PHP4的兼容性,他们必须做一个测试,让它正确地返回引用。否则,参考资料就会被搞砸。由于PHP4不支持静态方法(不管怎样,正确地说),因此使用函数是更好的方法。所以它仍然存在是因为遗留的原因


因此,如果您的应用程序仅为PHP5,那么执行
CI_Base::get_instance()应该没有问题相反,它是相同的…

这是一个单例结构,用于理解codeigniter如何加载库和类


只有扩展CI_控制器、模型、视图的类才能使用

$this->load->library('something');
$this->load->helper('something');//..etc
您的自定义类不能使用上述代码。 要在自定义类中使用上述功能,必须使用

$CI=&get instance();
$CI->load->library('something');
$CI->load->helper('something');
例如,在自定义类中

// this following code will not work
Class Car
{
   $this->load->library('something');
   $this->load->helper('something');
}

//this will work
Class Car
{
   $CI=&get_instance();
   $CI->load->library('something');
   $CI->load->helper('something');
}
// Here $CI is a variable.

$CI=get_instance();要将助手上的$this替换为$CI,

将其放入构造函数对我来说很有用:

function __construct()
{
$this->CI =& get_instance();
}

何时使用CI超级对象以及为什么?你能给我指一些关于CI超级对象的CI文档吗?+1实际上指的是
$CI=&get_instance()=&