【发布时间】: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 变量在通过解释器运行的脚本的整个生命周期内保持不变。"猜猜这解释得很好。