Php 解释$CI=&;获取_实例();
查看codeigniter的源代码 在它的助手函数中,我一直看到代码Php 解释$CI=&;获取_实例();,php,codeigniter,Php,Codeigniter,查看codeigniter的源代码 在它的助手函数中,我一直看到代码 $CI=&get_instance() 有人能给我解释一下这个代码是如何工作的吗 我知道它正在返回对$CI超级对象的引用,但是get\u instance()从何而来?get\u instance()是在CodeIgniter的核心文件中定义的函数。当您在超级对象之外的范围内时,可以使用它来获取对CodeIgniter超级对象的单例引用 我很确定它是在base.php或类似的东西中定义的。它基本上是一种使用函数而不是静态方法的
$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()当你看到404错误时,我正在用我的脸敲打文档,寻找那个…@Bugfixer,请使用编辑链接。已完成该链接,但您必须在自动加载[library]上定义帮助程序。请阅读以了解为什么不应在项目中的任何位置编写=&
。