【问题标题】:Is it possible for a static variable in PHP to loose it's valuePHP中的静态变量是否有可能失去它的价值
【发布时间】:2014-03-09 21:40:28
【问题描述】:

我来自 OO 背景,已经完成了为期 3 天的 PHP 速成课程,现在我尝试在一个相对较大的 PHP 项目中找到一些问题,而我遇到的问题似乎很奇怪(至少在其他 OO 语言中) )

所以我所拥有的是这样的:

class A
{
    static $num = 0;

    public static function instance($type, $options = array())
    {
        self::$num++;
        // some more code here
    }
}

在对该方法进行了几十次调用后,$num 值再次重置为 0,我想知道这怎么可能?我知道在 C# 等其他语言中,静态的生命周期就是应用程序的生命周期。那么 PHP 中静态变量重置的潜在原因是什么

【问题讨论】:

  • 不可能。如果它改变了它的价值——那么有什么东西改变了它。先把它改成private,看看有什么不同。 PS:使用静态不是“真的”OO,而只是使用类
  • 您对“应用程序的生命周期”的评论可能是解开谜团的关键。你在什么环境下运行PHP?如果它是一个网络服务器,那么可能有多个应用程序实例,它们可能会在不同的时间(对你任意)重新启动。在网络服务器中配置 PHP 的一种常见方法是在一定次数的访问后重新启动脚本,这可能解释您所看到的行为。
  • @Peter Smartt:嗯,什么?如果你先试试呢?
  • 您需要分享更多信息。通常使用 PHP(在大多数情况下),您的程序会为 每个请求 再次运行,所以生命周期很短 - 这可能是问题吗?

标签: php static


【解决方案1】:

如果这是从 HTTP 请求运行的,当用户更改页面或关闭并重新打开连接时,如果您的程序将产生一个全新的实例。如果是这种情况,您可能需要实现session variables

您可能遇到此问题的另一种方法是分别引用类和类(对象)的实例并获取不同的值。我不太清楚 PHP 是如何专门用静态方法处理这种行为的,但是编写一个类似于 this 问题的测试可能会有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多