php静态变量用于保持函数或类中变量值在多次调用间不重置:函数内用static声明,类中用public/protected/private static定义属性,静态方法中可用其维持状态,作用域受限且内存生命周期限于请求周期。

在PHP中,静态变量通常用于函数内部以保持其值在多次调用之间不被重置。以下是定义和使用PHP静态变量的具体方法:
一、在函数内部定义静态变量
静态变量通过在变量声明前添加static关键字实现,该变量仅在首次执行时初始化,后续调用保留上一次的值。
1、在函数体开头使用static关键字声明变量,例如:static $count = 0;
2、在函数逻辑中对静态变量进行读取或修改,如:$count++;
立即学习“PHP免费学习笔记(深入)”;
3、每次调用该函数时,$count不会重新初始化为0,而是延续上次结束时的值。
二、类中定义静态属性
类的静态属性属于类本身而非实例,所有对象共享同一份内存空间,可通过类名直接访问。
1、在类中使用public static、protected static或private static修饰变量,例如:public static $version = '1.0';
2、在类外部访问该静态属性时,使用类名::属性名语法,例如:MyClass::$version
3、在类内部方法中访问该静态属性时,使用self::$属性名,例如:self::$version
三、静态方法中使用静态变量
静态方法只能访问静态属性和其他静态方法,不能使用$this关键字,因此必须依赖静态变量维持状态。
1、在静态方法内声明静态变量,例如:static $instance = null;
2、检查该静态变量是否已赋值,若未赋值则执行初始化操作,例如:if ($instance === null) { $instance = new self(); }
3、返回该静态变量,确保多次调用返回同一个对象实例。
四、静态变量与全局变量的区别
静态变量作用域受限于函数或类上下文,而全局变量在整个脚本中可访问;静态变量生命周期跨越多次函数调用,但不会污染全局命名空间。
1、避免使用global关键字引入全局变量,改用函数内static声明替代。
2、在类中优先使用static属性而非全局数组存储配置或计数器。
3、确认静态变量的初始值只在第一次执行时生效,后续调用跳过初始化表达式,即使表达式含函数调用也不会重复执行。
五、静态变量的内存行为验证
PHP将静态变量存储在持久化内存区域,其值在请求周期内持续存在,但在Web服务器处理完当前HTTP请求后会被释放(CLI模式下依脚本运行周期而定)。
1、在函数中定义静态变量并输出其地址(使用spl_object_hash无法用于标量,需借助引用数组模拟)。
2、连续两次调用该函数,观察变量值是否递增,若递增则证明静态特性生效。
3、在不同函数中使用同名静态变量,确认它们互不影响,各自拥有独立存储空间。











