了解php引用和静态

时间:2013-10-02 17:11:49

标签: php codeigniter oop

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

谢谢!

1 个答案:

答案 0 :(得分:4)

以下功能

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

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

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

在这种情况下,$BM会获得班级Benchmark的参考。

检查References Explained

以下变量

static $_classes = array();

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

检查variable scope