子类对象之间共享函数中的 PHP 静态变量

问题描述 投票:0回答:1

令我惊讶的是,当在函数内部使用静态变量进行简单缓存时,静态值会保留在函数所在类的不同子类之间。

PHP8.0 和 8.1 之间有变化吗?

重现代码

class top{

    public function cacheValue(){
        static $cache;
        if (!isset($cache)) {
            $cache=get_class($this)."\n";
        }
        return $cache;
    }
}

class child1 extends top{

}
class child2 extends top{

}


$a = new child1;

$b = new child2;

echo $a->cacheValue();
echo $b->cacheValue();

预期结果:

孩子1 孩子2

实际结果:

孩子1 孩子1

php static
1个回答
0
投票

是的,这在 PHP 8.1 中发生了变化。来自迁移指南

继承方法中静态变量的使用
当继承(但不重写)使用静态变量的方法时,继承的方法现在将与父方法共享静态变量。

© www.soinside.com 2019 - 2024. All rights reserved.