首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 類關鍵字深度解析:$this、static、final、const、self

     編輯:PHP 相關知識

前言

PHP 物件導向程式設計中,$this、static、final、const、self 是核心關鍵字。本文系統解析各關鍵字用法、差異與最佳實踐。

$this:當前實例參考

僅能在物件內部使用,存取非靜態屬性與方法。

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父類別父類靜態/非靜態成員

static:靜態成員與晚期靜態綁定

靜態屬性:所有實例共享單一值

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:防止繼承與覆寫

final class BaseClass { }  // 禁止被繼承

class ParentClass {
    final public function lockedMethod() { }  // 禁止被覆寫
}

const:類別常數

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:當前類別參考

  • 存取靜態屬性:self::$staticProp
  • 呼叫靜態方法:self::staticMethod()
  • 存取常數:self::CONST_NAME
  • 配合 static:: 實現晚期靜態綁定(LSB)

總結對照表

關鍵字核心用途關鍵限制
$this實例成員存取僅物件內部、非靜態
static類別級共享/晚期綁定靜態方法僅存取靜態成員
final封鎖繼承/覆寫最終決定,不可逆
const類別常數無 $、不可變、編譯期解析
self當前類別靜態參考早期綁定(配合 static:: 晚期綁定)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved