PHP 物件導向程式設計中,$this、static、final、const、self 是核心關鍵字。本文系統解析各關鍵字用法、差異與最佳實踐。
僅能在物件內部使用,存取非靜態屬性與方法。
class MyClass {
private $name;
public function __construct($name) { $this->name = $name; }
public function getName() { return $this->name; }
public function printName() { echo $this->getName(); }
}
$obj = new MyClass("PHP");
$obj->printName(); // 輸出:PHP
| 關鍵字 | 用途 | 存取範圍 |
|---|---|---|
$this | 當前實例 | 非靜態屬性/方法 |
self | 當前類別 | 靜態屬性/方法/常數 |
parent | 父類別 | 父類靜態/非靜態成員 |
class Counter {
public static $count = 0;
public function increment() { echo ++self::$count; }
}
$c1 = new Counter(); $c1->increment(); // 1
$c2 = new Counter(); $c2->increment(); // 2(共享)
class Book {
static $visitors = 0;
public static function visit() {
echo "您是第 " . ++self::$visitors . " 位訪客";
}
}
Book::visit(); // 您是第 1 位訪客
Book::visit(); // 您是第 2 位訪客
self:: 為早期綁定(編譯期解析),static:: 為晚期靜態綁定(執行期解析,PHP 5.3+)final class BaseClass { } // 禁止被繼承
class ParentClass {
final public function lockedMethod() { } // 禁止被覆寫
}
class Math {
const PI = 3.14159;
public static function getPi() { return self::PI; }
}
echo Math::PI; // 3.14159
echo Math::getPi(); // 3.14159
const NAME = VALUE;(無 $ 符號)self::CONST_NAME(類內)、ClassName::CONST_NAME(類外)self::$staticPropself::staticMethod()self::CONST_NAMEstatic:: 實現晚期靜態綁定(LSB)| 關鍵字 | 核心用途 | 關鍵限制 |
|---|---|---|
$this | 實例成員存取 | 僅物件內部、非靜態 |
static | 類別級共享/晚期綁定 | 靜態方法僅存取靜態成員 |
final | 封鎖繼承/覆寫 | 最終決定,不可逆 |
const | 類別常數 | 無 $、不可變、編譯期解析 |
self | 當前類別靜態參考 | 早期綁定(配合 static:: 晚期綁定) |