PHP 简明教程

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();
?>

开发建议: 静态属性的一个经典用例是“计数器”。例如,您可以在构造函数中递增一个静态属性,从而实时记录该类一共被实例化了多少次。由于静态属性在所有对象间共享,这个数值在整个脚本生命周期内是全局统一的。