0

0

PHP静态属性值会变吗_PHP静态变量生命周期与赋值特性【操作】

星夢妙者

星夢妙者

发布时间:2026-02-13 08:12:10

|

288人浏览过

|

来源于php中文网

原创

静态属性属于类本身、被所有实例共享,首次加载时初始化且不自动重置;静态变量在函数内仅初始化一次、跨调用保留值;二者均不可序列化,且受运行环境(cli/fpm)影响显著。

php静态属性值会变吗_php静态变量生命周期与赋值特性【操作】

静态属性在类实例间共享,赋值后会变

PHP 的 static 属性不属于某个对象实例,而是属于类本身。只要程序运行期间未被显式修改或脚本结束,它的值就一直存在且所有实例共用。

常见错误现象:new 多个对象后对静态属性赋值,误以为只影响当前实例;或者在 CLI 模式下反复执行脚本时,发现值“没重置”,其实是每次执行都是新进程,静态属性本来就是从头初始化的——这点常被当成“值变了”,其实是预期行为。

  • 静态属性在类首次被加载(autoload 或直接使用)时初始化一次,之后除非代码主动改写,否则不会自动重置
  • 可在类内部、子类、外部通过 self::$propstatic::$propClassName::$prop 读写
  • 若声明时用了表达式(如 static $count = time();),PHP 会报错:静态属性只能用字面量或常量初始化

静态变量在函数内仅初始化一次,后续调用保留上次值

函数内的 static 变量不是全局变量,但生命周期跨越多次函数调用。它在第一次执行到该行时初始化,之后每次进入函数都跳过初始化,直接使用上一次退出时的值。

使用场景:计数器、缓存单次计算结果、避免重复初始化资源(如数据库连接句柄)。

立即学习PHP免费学习笔记(深入)”;

北极象沉浸式AI翻译
北极象沉浸式AI翻译

免费的北极象沉浸式AI翻译 - 带您走进沉浸式AI的双语对照体验

下载
  • 不能用变量、函数调用等动态表达式初始化,例如 static $cache = get_default(); 是非法的
  • CLI 下连续调用同一函数,值持续累加;FPM/Apache 模式下每个请求是独立进程,静态变量每次请求都重新初始化
  • 注意与 global 区分:静态变量作用域仍限于函数内,外部不可见

静态属性和静态变量都被序列化忽略

调用 serialize() 序列化对象时,静态属性不会被保存;同理,unserialize() 还原对象后,静态属性恢复为类定义时的初始值(或未初始化状态)。

静态变量更彻底:它根本不在对象结构里,序列化完全不感知它的存在。

  • 如果依赖静态属性存储关键状态(如登录令牌计数),别指望序列化/反序列化能维持它
  • 想持久化这类数据,必须手动提取并存入可序列化的字段,或改用外部存储(Redis、文件等)
  • __sleep()__wakeup() 对静态属性无效,它们只处理普通属性

继承中 static:: 和 self:: 对静态属性的行为差异

子类继承父类静态属性时,如果不重定义,会共享同一份存储;但一旦子类声明了同名静态属性,就变成独立副本。这时用 self:: 总是指向当前类定义的作用域,而 static:: 遵循后期静态绑定(LSB),指向实际调用的类。

容易踩的坑:以为 self::$data 在子类方法里会访问子类自己的静态属性,结果还是改到了父类的。

  • static::$data 才能实现“谁调用,改谁的”逻辑;用 self::$data 则永远固定在定义该方法的类上
  • PHP 5.3+ 支持 LSB,低版本只能靠传参或抽象方法绕过
  • 静态属性不支持 private 继承可见性控制:子类无法访问父类 private static 属性,哪怕在父类方法里用 self:: 访问也不行
静态属性和静态变量的“不变性”是相对的——它们不会因实例增减或函数退出而自动清空,但完全受代码控制,任何一次赋值都会改变其值。真正容易被忽略的是运行环境带来的差异:CLI 单进程长生命周期 vs FPM 多进程短生命周期,会导致观察到的行为截然不同。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1550

2023.10.24

counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

198

2023.11.20

counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

198

2023.11.20

counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

198

2023.11.20

全局变量怎么定义
全局变量怎么定义

本专题整合了全局变量相关内容,阅读专题下面的文章了解更多详细内容。

85

2025.09.18

python 全局变量
python 全局变量

本专题整合了python中全局变量定义相关教程,阅读专题下面的文章了解更多详细内容。

101

2025.09.18

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

992

2023.11.02

内存数据库有哪些
内存数据库有哪些

内存数据库有Redis、Memcached、Apache Ignite、VoltDB、TimesTen、H2 Database、Aerospike、Oracle TimesTen In-Memory Database、SAP HANA和ache Cassandra。更多关于内存数据库相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

657

2023.11.14

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

1

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 11.6万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.2万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号