PHP 简明教程

PHP 静态方法

1. 什么是 PHP 静态方法?

静态方法可以直接调用,而不需要首先创建类的实例。既然不需要实例化对象就能运行逻辑,静态方法非常适合作为工具函数或辅助方法存在。

静态方法是通过 static 关键字声明的:

1.1 语法

<?php
class ClassName {
  public static function staticMethod() {
    echo "你好,世界!";
  }
}
?>

2. 访问静态方法

要访问静态方法,需要使用类名、双冒号(::)和方法名。双冒号被称为作用域解析运算符(Scope Resolution Operator)。

代码示例:

<?php
class greeting {
  public static function welcome() {
    echo "你好,世界!";
  }
}

// 直接通过类名调用静态方法
greeting::welcome();
?>

3. 在同一类中访问静态方法

一个类可以同时拥有静态和非静态方法。如果您想在同一个类的另一个方法中访问静态方法,可以使用 self 关键字,后跟双冒号(::)。

代码示例:

<?php
class greeting {
  public static function welcome() {
    echo "你好,世界!";
  }

  public function __construct() {
    // 使用 self 关键字调用静态方法
    self::welcome();
  }
}

new greeting();
?>

4. 在另一个类中访问静态方法

如果静态方法被声明为 public,那么它也可以从其他类中被访问。

在下例中,SomeOtherClass 通过类名 greeting 成功调用了其内部的静态方法:

代码示例:

<?php
class greeting {
  public static function welcome() {
    echo "你好,世界!";
  }
}

class SomeOtherClass {
  public function message() {
    greeting::welcome();
  }
}
?>

5. 从子类访问静态方法

子类可以通过 parent 关键字访问父类中的静态方法。即便该静态方法在子类中被重写(Override),parent 依然能精准指向父类的原始实现。

代码示例:

<?php
class domain {
  protected static function getWebsiteName() {
    return "Begindev.com";
  }
}

class domainW3 extends domain {
  public $websiteName;
  public function __construct() {
    // 使用 parent 关键字访问父类的静态方法
    $this->websiteName = parent::getWebsiteName();
  }
}

$domainW3 = new domainW3;
echo $domainW3->websiteName;
?>

设计建议: 静态方法不属于任何具体的对象实例,因此在静态方法内部无法使用 $this 关键字。只有当方法逻辑不依赖于对象的状态(即不需要访问非静态属性)时,才应将其声明为静态。