详细介绍PHP中static静态变量
封面图
•
2025-10-11
•
PHP
182
0
0
0
在 PHP 中,`static` 关键字用于声明**静态变量**(也称为类变量),它与对象实例无关,而是属于**类本身**。静态变量在整个类的生命周期中都存在,并且可以在不创建对象的情况下访问。 --- ## 一、静态变量的基本概念 ### 1. 定义方式 ```php class MyClass { public static $myStaticVar = 'Hello'; } ``` - `static` 关键字表示这个变量是静态的。 - 静态变量属于类,而不是类的实例(对象)。 --- ## 二、静态变量的特点 | 特点 | 描述 | |------|------| | **类级作用域** | 静态变量属于类,不是对象的属性。 | | **无需实例化即可访问** | 可以通过类名直接访问:`MyClass::$myStaticVar` | | **全局唯一性** | 所有该类的实例共享同一个静态变量。 | | **初始化时赋值** | 只能使用常量表达式进行初始化(不能使用函数调用等)。 | --- ## 三、静态变量的使用示例 ### 示例 1:基本使用 ```php class Counter { public static $count = 0; public function increment() { self::$count++; } public static function getCount() { return self::$count; } } // 不需要创建对象 Counter::$count = 10; // 直接修改静态变量 echo Counter::getCount(); // 输出 10 $counter = new Counter(); $counter->increment(); echo Counter::getCount(); // 输出 11 ``` ### 示例 2:静态变量与对象共享 ```php class User { public static $userCount = 0; public function __construct() { self::$userCount++; } } $user1 = new User(); $user2 = new User(); echo User::$userCount; // 输出 2 ``` --- ## 四、静态变量 vs 实例变量 | 特性 | 静态变量 | 实例变量 | |------|----------|-----------| | 存储位置 | 类级别 | 对象级别 | | 是否共享 | 是 | 否 | | 访问方式 | 类名::变量 | $obj->变量 | | 生命周期 | 整个程序运行期间 | 对象销毁时消失 | --- ## 五、静态变量的注意事项 ### 1. **只能使用常量表达式初始化** ```php class MyClass { public static $var = 10; // ✅ 正确 public static $var2 = 'text'; // ✅ 正确 public static $var3 = true; // ✅ 正确 public static $var4 = [1,2,3]; // ❌ 错误(PHP 7.0+ 支持) public static $var5 = myFunction(); // ❌ 错误 } ``` > 注意:从 PHP 7.0 开始,可以使用数组、字符串、整数等常量表达式进行初始化。 --- ### 2. **不能使用 `$this` 访问静态变量** ```php class MyClass { public static $staticVar = 'static'; public function test() { echo $this->staticVar; // ❌ 错误:不能用 $this 访问静态变量 echo self::$staticVar; // ✅ 正确 } } ``` --- ### 3. **静态方法中不能使用 `$this`** ```php class MyClass { public static function show() { // echo $this->property; // ❌ 错误:不能在静态方法中使用 $this } } ``` --- ## 六、静态变量的用途 | 场景 | 说明 | |------|------| | **计数器** | 如统计对象数量、访问次数等 | | **配置信息** | 存储类级别的配置参数 | | **单例模式** | 用于实现单例设计模式 | | **缓存数据** | 缓存一些不需要频繁更新的数据 | --- ## 七、静态变量的内存管理 - 静态变量在类第一次被加载时初始化。 - 在整个程序执行期间一直存在,直到程序结束。 - 如果类被卸载(如在某些框架中),静态变量也会被释放。 --- ## 八、静态变量和 `self::` 的关系 在类内部访问静态变量或方法时,推荐使用 `self::` 或 `static::`: ```php class MyClass { public static $var = 'value'; public static function getVar() { return self::$var; // ✅ 推荐写法 // return static::$var; // 也可以,但更适用于继承场景 } } ``` --- ## 九、总结 | 内容 | 说明 | |------|------| | `static` | 声明静态变量或方法 | | **静态变量** | 属于类,所有实例共享 | | **访问方式** | `ClassName::$var` 或 `self::$var` | | **适用场景** | 计数器、配置、缓存等 | | **注意点** | 不能使用 `$this`,初始化只能用常量表达式 | --- 如果你还有关于静态方法、静态类、单例模式等方面的问题,我也可以继续为你详细讲解!
上一篇:
如何面试 PHP 工程师?
下一篇:
用php写一个正则表达式,过虑网页上的所有JS/VBS脚本(即把script标记及其内容都去掉)
标题录入,一次不能超过6条
留言
评论