PHP静态变量与static用法深度解析

0 下载量 107 浏览量 更新于2024-09-01 收藏 75KB PDF 举报
"PHP中的静态变量及static静态变量使用详解" 在PHP编程中,静态变量(static)和静态类属性(static class properties)是两种非常重要的概念,它们在函数调用和类继承中扮演着关键角色。 静态变量是在函数内部定义的,但与普通局部变量不同,静态变量不会在每次函数调用结束时被销毁。这意味着,当函数再次被调用时,静态变量会保留其上次调用时的值。这种特性使得静态变量在需要在函数间保持状态或计数器等场景下非常有用。以下是一个简单的示例: ```php function test() { static $nm = 1; $nm = $nm * 2; print $nm . "<br/>"; } test(); // 输出 2 test(); // 输出 4 test(); // 输出 8 ``` 在这个例子中,`$nm` 在每次调用 `test()` 函数时都会保留其上一次的值并进行翻倍,而非每次都从1开始计算。 静态类属性则属于类本身,而不是类的任何实例。这意味着所有类的实例共享相同的静态属性值。静态属性的声明使用 `public static` 关键字,并且可以通过类名或 `self::` 作用域限定符来访问: ```php class NowaMagic { public static $nm = 1; public function nmMethod() { self::$nm += 1; echo self::$nm . '<br/>'; } } $nmInstance1 = new NowaMagic(); $nmInstance1->nmMethod(); // 输出 2 $nmInstance2 = new NowaMagic(); $nmInstance2->nmMethod(); // 输出 3 ``` 在这个例子中,`NowaMagic` 类的静态属性 `$nm` 被两个不同的实例共享,无论创建多少个实例,它的值都会在所有实例中累加。 静态属性还可以通过 `parent::` 作用域限定符来访问父类的静态属性,这对于类继承场景下的数据共享和方法调用非常有用: ```php class Article extends NowaMagic { public function articleMethod() { return parent::$nm; // 访问父类 NowaMagic 的静态属性 } } $articleInstance = new Article(); echo $articleInstance->articleMethod(); // 输出父类 NowaMagic 的静态属性 $nm 的值 ``` PHP 中的静态变量和静态类属性都是为了在特定的生命周期内持久化数据,它们在处理函数重复调用时的数据保留以及类之间的共享状态方面提供了便利。理解和熟练运用这些概念将有助于编写更加高效和灵活的代码。