我正在尝试理解CodeIgniter核心基础知识,例如加载类。我被困在这个:
function &load_class($class, $directory = 'libraries', $prefix = 'CI_')
{
static $_classes = array();
// Does the class exist? If so, we're done...
if (isset($_classes[$class]))
{
return $_classes[$class];
}
...
... // more code
...
}
然后他们像这样加载类:
$BM =& load_class('Benchmark', 'core');
所以我的理解问题是为什么使用&在函数名称之前,为什么静态使用以及为什么'=& '被使用..我认为他们有一些共同点。 每次使用load_class函数时,$ _classes是否覆盖为空数组?
谢谢!
答案 0 :(得分:4)
以下功能
function &load_class($class, $directory = 'libraries', $prefix = 'CI_') { //... }
将返回引用而不是值。这意味着,当您调用此函数时
$BM =& load_class('Benchmark', 'core');
在这种情况下,$BM
会获得班级Benchmark
的参考。
以下变量
static $_classes = array();
只会被初始化一次,并且在函数结束时以及下次执行重新进入函数时保持它的状态,如果它看到变量$_classes
已经初始化,那么它将不会再次初始化它如果它没有初始化,那么它将初始化它。当您需要在后续调用中保持变量的相同状态而不是全局变量时,这非常有用。