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

PHP 延遲靜態綁定實例解析:static vs self 關鍵字差異

     編輯:PHP 相關知識

概念釐清

延遲靜態綁定:指類別中的 self 非以定義時類別為準,而是以實際執行時的呼叫類別為準。若使用 static:: 則會優先尋找子類別的方法,找不到再回溯父類別。

程式碼範例

<?php
header("content-type:text/html;charset=utf-8");

class Human {
    public static function hei() {
        echo "我是父類的 hei() 方法";
    }

    public function say() {
        // 子類別呼叫父類別 say() 時
        self::hei();    // 此處調用父類別的 hei()
        static::hei();  // 此處調用子類別的 hei(),若子類別不存在則回溯父類別
    }
}

class Stu extends Human {
    public static function hei() {
        echo "我是子類的 hei() 方法";
    }
}

$stu = new Stu();
$stu->say();
?>

執行結果說明

  1. $stu->say() 在 Human 類別內執行,故 self::hei() 綁定至 Human::hei()。
  2. static::hei() 採用延遲靜態綁定,優先在 Stu 尋找 hei(),找到則呼叫 Stu::hei();若 Stu 無此方法則回溯至 Human::hei()。

核心差異表

關鍵字綁定時機查找順序
self::編譯期(定義類別時)僅限當前定義的類別
static::執行期(實際呼叫時)優先實際呼叫類別 → 父類別

應用場景

當父類別定義流程骨架,需由子類別實作具體步驟(如 Template Method 模式)時,使用 static:: 可確保呼叫到子類別的實作方法。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved