[PHP]类内方法静态变量重复初始化问题

按我们理解,静态变量只会初始化一次;但最近本地环境和线上环境代码执行结果不一致才发现这个坑;

本地环境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版本修复了修复这个问题。

PHP RFC: Static variables in inherited methods