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 关键字。只有当方法逻辑不依赖于对象的状态(即不需要访问非静态属性)时,才应将其声明为静态。