3

我正在尝试了解 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 是否都会覆盖为空数组?

谢谢!

4

1 回答 1

4

以下函数

function &load_class($class, $directory = 'libraries', $prefix = 'CI_') { //... }

将返回引用而不是值。这意味着,当您像这样调用函数时

$BM =& load_class('Benchmark', 'core');

在这种情况下$BM将获得类的引用Benchmark

检查参考解释

以下变量

static $_classes = array();

将只初始化一次,并且在函数结束时以及下次执行重新进入函数时保持其状态,如果它看到变量$_classes已经初始化,则不会再次初始化它,如果它没有初始化,那么它' l 初始化。当您需要在后续调用中保持变量的相同状态但还不是全局变量时,这很有用。

检查变量范围

于 2013-10-02T17:40:57.530 回答