::(Paamayim Nekudotayim)用於訪問類的**靜態屬性**、**靜態方法**、**類常量**,以及**晚靜態綁定** 中的 static::。不適用於實例屬性/方法(需用 ->)。
<?php
class A {
const VERSION = '1.0';
public static $count = 0;
public static function ec() {
echo "靜態方法調用\n";
}
}
// 類外部調用
echo A::VERSION; // 1.0
echo A::$count; // 0
A::ec(); // 靜態方法調用
// 類內部調用(繼承場景)
class B extends A {
public static function test() {
self::ec(); // 編譯期綁定 → A::ec()
static::ec(); // 運行期綁定 → B::ec() (晚靜態綁定)
parent::ec(); // 顯式調用父類
}
}
B::test();
?>
| 場景 | 語法 | 說明 |
|---|---|---|
| 類常量 | ClassName::CONST | 不可修改,繼承可覆蓋 |
| 靜態屬性 | ClassName::$prop | 所有實例共享,存儲於類而非對象 |
| 靜態方法 | ClassName::method() | 無 $this,不可訪問非靜態成員 |
| 晚靜態綁定 | static::method() | PHP 5.3+,解決繼承中靜態調用多態問題 |
$obj::method():對象實例調用靜態方法雖合法但不推薦(語義混淆)。ClassName::nonStaticMethod():嚴格模式下拋出 Error(PHP 7+)。class Singleton {
private static $instance = null;
private function __construct() {}
private function __clone() {}
public static function getInstance() {
if (self::$instance === null) {
self::$instance = new self();
}
return self::$instance;
}
}
$obj = Singleton::getInstance();
掌握 :: 的綁定規則,是寫出可復用、可擴展 PHP 面向對象代碼的基石。