PHP 静态属性
1. 什么是 PHP 静态属性?
静态属性可以直接调用,而不需要创建类的实例。既然静态属性属于类本身而不是某个具体的对象,它们非常适合存储那些在所有实例之间共享的数据。
静态属性是通过 static 关键字声明的:
1.1 语法
<?php
class ClassName {
public static $staticProp = "W3Schools";
}
?>2. 访问静态属性
要访问静态属性,需要使用类名、双冒号(::)和属性名。与静态方法一样,这里的双冒号被称为作用域解析运算符(Scope Resolution Operator)。
代码示例:
<?php
class pi {
public static $value = 3.14159;
}
// 直接通过类名访问静态属性
echo pi::$value;
?>访问静态属性时,必须在属性名前加上$符号(例如ClassName::$staticProp)。这与访问静态方法或类常量(不需要$)是有区别的。
3. 在同一类中访问静态属性
如果您想在定义该属性的同一个类的方法内部访问它,可以使用 self 关键字,后跟双冒号(::)和属性名。
代码示例:
<?php
class pi {
public static $value = 3.14159;
public function staticValue() {
// 在类内部使用 self 访问
return self::$value;
}
}
$pi = new pi();
echo $pi->staticValue();
?>4. 从子类访问静态属性
子类可以通过 parent 关键字访问父类中定义的静态属性。这在需要扩展父类逻辑但仍需引用原始静态数据时非常有用。
代码示例:
<?php
class pi {
public static $value = 3.14159;
}
class x extends pi {
public function xStatic() {
// 使用 parent 关键字从子类引用父类的静态属性
return parent::$value;
}
}
// 即使没有实例化 pi 类,子类也可以获取其静态值
$x = new x();
echo $x->xStatic();
?>开发建议: 静态属性的一个经典用例是“计数器”。例如,您可以在构造函数中递增一个静态属性,从而实时记录该类一共被实例化了多少次。由于静态属性在所有对象间共享,这个数值在整个脚本生命周期内是全局统一的。