PHP类中无需Session或手动设置,如何自动递增实例的$stepOrder变量
实现PHP类实例化时自动递增的属性值
需求说明:创建Step类,每次实例化该类时,实例的stepOrder属性自动从1开始递增,不需要手动设置属性值或依赖Session来维持计数。
解决方案:使用类静态变量
利用PHP的类静态变量特性,静态变量属于类本身,会在应用生命周期内持久保存状态,所有实例共享这个计数器。
class Step { // 静态计数器,记录下一个实例的序号 private static int $counter = 1; public int $stepOrder; public function __construct() { // 实例化时赋值并自增计数器 $this->stepOrder = self::$counter++; } } $steps = [ new Step(), new Step(), new Step(), ]; echo $steps[0]->stepOrder; // 输出 1 echo $steps[1]->stepOrder; // 输出 2 echo $steps[2]->stepOrder; // 输出 3
原理说明
- 静态变量
$counter绑定在Step类上,而非单个实例,所以每次创建新实例时,都会读取当前的计数器值。 - 构造函数在实例初始化时自动执行,将当前计数器值赋值给实例的
$stepOrder,随后计数器自增,保证下一个实例拿到的是递增后的数值。 - 该方案仅依赖PHP自身的类特性,在当前请求的运行周期内可以稳定维持计数,无需额外存储手段。
内容的提问来源于stack exchange,提问作者Jonathan P
相关产品推荐
相关产品推荐

