当前位置: 首页 > article >正文

php 静态变量

在 PHP 中,静态变量是一种特殊类型的变量,使用关键字 static 来声明。它们具备以下特性和用途:

  • 生命周期与作用域
    • 生命周期:静态变量在函数或类的第一次执行时被初始化,之后在脚本的整个生命周期内都持续存在,不会随着函数调用结束而销毁。这与普通局部变量形成鲜明对比,普通局部变量在函数执行完毕后就会从内存中清除。
    • 作用域:静态变量的作用域限定在声明它的函数或类内部,外部无法直接访问。例如:
function testStatic() {
    static $count = 0;
    $count++;
    echo $count;
}

testStatic(); // 输出 1
testStatic(); // 输出 2

每次调用 testStatic 函数时,$count 变量的值会在上一次调用结果的基础上累加,因为它一直存活在内存中,而不是每次都重新初始化为 0

  • 类中的静态变量
    • 在类里,静态变量归属于类本身,而非类的实例对象。所有类的实例共享这一静态变量。
class MyClass {
    static $sharedValue = 10;

    public function incrementSharedValue() {
        self::$sharedValue++;
    }
}

$obj1 = new MyClass();
$obj2 = new MyClass();

$obj1->incrementSharedValue();
echo MyClass::$sharedValue; // 输出 11

这里,通过类的任意实例修改静态变量 $sharedValue,该类的所有实例访问此静态变量时都会看到更新后的值,因为它们指向同一个静态存储区。

  • 静态变量的初始化
    • 静态变量只会初始化一次,后续调用函数或者访问类时,不会再次执行初始化语句。而且初始化表达式必须是一个常量值,不能是函数调用或者变量,例如:
function wrongStaticInit() {
    static $var = rand(); // 错误,rand() 是函数调用
    //...
}

正确的做法是使用固定的常量、字面量来初始化,像 static $num = 5; 这种形式。

  • 递归函数与静态变量
    • 在递归函数中,静态变量非常有用。由于静态变量不会随递归调用重置,它可以用来记录递归的层级、状态等关键信息。
function recursiveFunction($n) {
    static $depth = 0;
    $depth++;
    if ($n > 0) {
        recursiveFunction($n - 1);
    }
    $depth--;
    return $depth;
}

上述函数里,$depth 借助静态变量的特性,准确记录递归的深度,让开发者能更好把控递归流程。


http://www.kler.cn/a/459534.html

相关文章:

  • 【开源社区openEuler实践】rust_shyper
  • 旧服务改造及微服务架构演进
  • 行为模式5.中介者模式-聊天室收发消息
  • 超越YOLO11!DEIM:先进的实时DETR目标检测
  • 论文泛读《LPFHE: Low-Complexity Polynomial CNNs for Secure Inference over FHE》
  • MySQL 08 章——聚合函数
  • linux 配置端口转发
  • 前端Python应用指南(四)Django实战:创建一个简单的博客系统
  • Java的SpringMVC
  • 嵌入式硬件杂谈(八)电源的“纹波”到底是什么?
  • Linux 信号集与信号掩码
  • uniapp小程序使用rich-text富文本图片溢出问题
  • ZYNQ7000双核AMP文档解读
  • 爬虫的工作原理
  • 百度热力图数据处理流程Arcgis PRO篇,Arcgis,QGIS见链接其他文章
  • 互联网全景消息(8)之RabbitMQ进阶介绍
  • 【机器学习】概述
  • 【C++11】类型分类、引用折叠、完美转发
  • 【数据库初阶】Linux中表的基础操作
  • 【Redis】集群配置(主从复制 哨兵搭建)
  • JPA查询部分字段的最佳实践
  • Python 中的 with open:文件操作的最佳实践
  • 发布远程组件vue2+Webpack和vue3+vite
  • 面试场景题系列:设计云盘系统
  • jmeter设置tps、响应时间监测时间间隔
  • DigitalOcean Kubernetes现已支持VPC natvie集群