PHP 在多次调用中持续存在的静态变量
PHP static variable persisting in multiple calls
我正在尝试使用静态可链接方法编写 class,但最奇怪的是我的变量在调用之间持续存在。
<?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 个 foo 呢? foo class 中的 $a 变量在调用之间以某种方式持续存在。我认为静态调用创建了自己的临时对象,与之前的调用无关。
有人得到解释或解决方法吗?
根据定义,静态变量在调用之间是持久的。
静态 属性 链接到 class,而不是对象。
否则,它会在您的调用之间存储在哪里?
我正在尝试使用静态可链接方法编写 class,但最奇怪的是我的变量在调用之间持续存在。
<?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 个 foo 呢? foo class 中的 $a 变量在调用之间以某种方式持续存在。我认为静态调用创建了自己的临时对象,与之前的调用无关。
有人得到解释或解决方法吗?
根据定义,静态变量在调用之间是持久的。
静态 属性 链接到 class,而不是对象。
否则,它会在您的调用之间存储在哪里?