2013-10-02 46 views
3

我想了解CodeIgniter的核心基础知识,如加载类。我被困在此:了解PHP参考和静态

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'); 

所以我understandig的问题是,为什么之前的函数名称使用&,为什么是静态的使用和为什么'= & '被使用..我认为他们有一些共同点。 每次使用load_class函数时,$ _classes是否被覆盖为空数组?

谢谢!

回答

4

以下函数

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

将返回的值的引用来代替。这意味着,当你调用这样

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

功能在这种情况下$BM将获得类Benchmark的参考。

检查References Explained

以下变量

static $_classes = array(); 

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

检查variable scope

+0

这正是我想听到的,谢谢! 因此$ _classes将被初始化一次,因为每次使用'=&',实际上都使用相同的实例? – smotru

+0

是的,这个变量会保持它在函数范围内的状态。 –