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

PHP self 與 $this 深度對比:類別靜態 vs 實例動態

     編輯:PHP 綜合知識

核心差異速查

特性self$this
指向類別本身(靜態)當前實例(動態)
存取成員靜態屬性、常量、靜態方法實例屬性、實例方法
語法self::$prop、self::CONST、self::method()$this->prop、$this->method()
繼承行為編譯期綁定定義類(除非用 static::)執行期綁定實際實例類別
可用範圍靜態/非靜態方法均可僅非靜態方法

程式碼對照

class A {
    public static $s = 'A-static';
    public $i = 'A-instance';
    public function show() {
        echo self::$s . ' | ' . $this->i; // 靜態 vs 實例
    }
}
class B extends A {
    public static $s = 'B-static';
    public $i = 'B-instance';
}
$b = new B();
$b->show(); // 輸出:A-static | B-instance
// self::$s 綁定 A(定義處),$this->i 綁定 B(實例實際類別)

parent 結合示範

class Base {
    public function __construct() { echo "Base construct\n"; }
}
class Child extends Base {
    public function __construct() {
        parent::__construct(); // 呼叫父類建構子
        echo "Child construct\n";
    }
    public function demo() {
        self::demoStatic(); // 類別靜態方法
    }
    public static function demoStatic() { echo "Static\n"; }
}
new Child();
// 輸出:
// Base construct
// Child construct

最佳實踐

  • 需多態靜態呼叫 → 改用 static::method() (LSB)。
  • 靜態方法中不可使用 $this,會拋錯誤。
  • 常量、配置值、單例實例、快取池 → 歸屬 self::。
  • 業務資料、狀態、依賴注入 → 歸屬 $this->。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved