静态变量的生命周期

发布于 2024-12-09 02:43:53 字数 632 浏览 0 评论 0原文

我正在阅读一本 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 声明为静态没有意义,因为此代码将运行一次。
如果它在用户会话期间处于活动状态,PHP 引擎如何知道这一点?

I'm going through a Joomla book, and I came across the following piece of code in the chapter of MVC pattern:

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];
    }
}

What is the lifetime of $instances? When is it destroyed?

If it is alive during the lifetime of the request, then declaring $instances static doesn't make sense, because this code will be run once.
If it is alive during user session, how does PHP engine knows this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

不醒的梦 2024-12-16 02:43:53

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

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

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

If it is alive during the lifetime of the request, then declaring
$instances static doesn't make sense, because this code will be run
once.

Yes, the static variable only exists for the duration of the request. It's a common design pattern to store an object in a static variable if it's expensive to create, or if having multiple copies will cause problems.

It's not necessarily the case that this function only be called once - it will likely be called multiple times, at least on certain pages / for certain modules.

再浓的妆也掩不了殇 2024-12-16 02:43:53

从代码来看,该变量一直持续到脚本执行完毕。

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

By the looks of the code, the variable lasts until the script is finished being executed.

Because you can't access the variable from outside that function, and there is no unset() call to that variable, it doesn't get destroyed until the end of script execution.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文