静态变量的生命周期

时间:2011-10-09 22:44:04

标签: php joomla

我正在浏览一本Joomla书,我在MVC模式一章中遇到了以下代码:

class QuizController extends JController
{
    static function &getInstance(/* some PHP code... */)
    {
        // use a static array to store controller instances
        static $instances;

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

        /* some PHP code... */

        // return a reference to the controller
        return $instances[$class];
    }
}

$instances的生命周期是多少?什么时候被摧毁?

如果它在请求的生命周期内处于活动状态,则声明$instances static是没有意义的,因为此代码将运行一次。
如果它在用户会话期间处于活动状态,那么PHP引擎如何知道这一点?

2 个答案:

答案 0 :(得分:1)

通过代码的外观,变量将持续到脚本执行完毕为止。

因为您无法从该函数外部访问变量,并且没有unset()调用该变量,所以在脚本执行结束之前它不会被销毁。

答案 1 :(得分:0)

  

如果它在请求的生命周期内仍然存在,则声明   $ instances static没有意义,因为这段代码将被运行   一次。

是的,静态变量仅在请求期间存在。如果创建对象很昂贵,或者如果有多个副本会导致问题,那么将对象存储在静态变量中是一种常见的设计模式。

不一定是这个函数只被调用一次 - 它可能被多次调用,至少在某些页面/某些模块上被调用。