3

嗨,我正在查看 Joomla 的代码并试图弄清楚这个函数到底发生了什么。

index.php 调用函数

$app = JFactory::getApplication('site');

jfactory.php 代码

public static function getApplication($id = null, $config = array(), $prefix='J')
{
    if (!self::$application) {

        jimport('joomla.application.application');

        self::$application = JApplication::getInstance($id, $config, $prefix);
    }

    return self::$application;
}

application.php 代码..

public static function getInstance($client, $config = array(), $prefix = 'J')
{
    static $instances;

    if (!isset($instances)) {
        $instances = array();
    }

    ....... more code ........

    return $instances[$client];
}

现在我无法在函数 getApplication 中弄清楚为什么使用 self:$application。

self::$application = JApplication::getInstance($id, $config, $prefix);

$application 始终为空,使用这种方法的目的是什么。我尝试将其修改为

$var = JApplication::getInstance($id, $config, $prefix);

并返回它,但它不起作用。

如果有更多知识的人可以尽可能详细地解释这里发生的事情,我将非常高兴。非常感谢。

4

2 回答 2

4

self::用于访问类的静态成员。

因此在这种情况下,self::$application用于在 JFactory 中缓存应用程序对象,以避免多次调用JApplication::getInstance更昂贵。

有关静态的更多信息,请参阅静态关键字

于 2012-11-01T21:48:44.023 回答
1

getApplication()- 返回对 Global JApplication 对象的引用。阅读更多

self::$member用于访问静态成员。

这是我能理解的解释。

if (!self::$application){ //<-check for the $application static variable of the the class

jimport('joomla.application.application');        
self::$application = JApplication::getInstance($id, $config, $prefix);

//if it does not exist get a new instance otherwise nothing happens because there is no else part 
}

return self::$application; //<- return the object(new one or the existing one)

如果 $application 存在,则保存函数调用。如果没有得到一个新的实例。阅读更多。希望这可以帮助你。

于 2012-11-01T22:51:46.657 回答