【问题标题】:PHP static variable persisting in multiple callsPHP静态变量在多个调用中持续存在
【发布时间】:2018-02-01 14:42:23
【问题描述】:

我正在尝试使用静态可链接方法编写一个类,但最奇怪的事情是我的变量在调用之间持续存在。

<?php

class foo {
    private static $a = '#';

    public static function more($string)
    {
        self::$a .= $string;
        return new static;
    }

    public static function print()
    {
        echo self::$a . "\n";
    }
}

foo::print();
foo::more('foo')->more('foo')->print();
foo::more('foo')->print();

输出:

#
#foofoo
#foofoofoo

第一行和第二行在我看来是正确的。但是为什么第三行会有 3 个 foos 呢? foo 类中的 $a 变量在调用之间以某种方式持续存在。我认为静态调用创建了自己的临时对象,与之前的调用无关。

有人有解释或解决方法吗?

【问题讨论】:

  • 因为你打电话给more。这与第二行是#foofoo 的原因相同。 static 是在类级别,而不是对象级别。
  • "PHP 变量在通过解释器运行的脚本的整个生命周期内保持不变。"猜猜这解释得很好。

标签: php php-7.1


【解决方案1】:

根据定义,静态变量在调用之间是持久的。

静态属性链接到一个类,而不是一个对象。

否则,它会在您的通话之间存储在哪里?

【讨论】:

    猜你喜欢
    • 2011-10-05
    • 2010-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-16
    • 2013-06-03
    • 2011-12-05
    • 1970-01-01
    相关资源
    最近更新 更多