按我们理解,静态变量只会初始化一次;但最近本地环境和线上环境代码执行结果不一致才发现这个坑;
本地环境PHP版本为:8.1
线上环境PHP版本为:7.4
先看一段代码:
<?php
class A{
public function aa(){
static $a = 0;
$a++;
}
public function cc(){
$this->aa();
B::bb();
}
}
class B extends A{
public static function bb(){
$a = new self();
$a->aa();
}
}
$a = new A();
$a->cc();
B::bb();
$a->cc();
B::bb();
这段代码你觉得输出结果应该是什么,但按照对static
理解,第一反应就是:
int(1)
int(2)
int(3)
int(4)
int(5)
int(6)
但在PHP8.1之前都是:
int(1)
int(1)
int(2)
int(2)
int(3)
int(4)
这static $a = 0
这段被重复初始化了,在8.1的提议日志上可以看到,在8.1版本修复了修复这个问题。