首頁 > 後端開發 > php教程 > 如何在靜態方法呼叫中從擴充 PHP 類別取得類別名稱?

如何在靜態方法呼叫中從擴充 PHP 類別取得類別名稱?

Susan Sarandon
發布: 2024-11-01 10:10:29
原創
1086 人瀏覽過

How to Get the Class Name from an Extended PHP Class in a Static Method Call?

從擴充PHP 類別靜態呼叫中取得類別名稱

在物件導向程式設計中,類別經常擴充基底類別來繼承和擴充其擴充功能。常見場景涉及需要從擴展類別中的靜態方法呼叫獲取類別名稱,儘管 CLASS 始終返回定義類別的名稱。

問題:父靜態方法中類別名稱無法存取

考慮一個有兩個類別的場景,ActionMyAction,其中MyAction擴充動作Action 定義了一個靜態方法n(),它無法透過父靜態方法中的CLASS 常數訪問,從而產生CLASS無論呼叫類別如何,值都設定為“Action”。

解決方案:

1.後期靜態綁定(PHP 5.3 ):

後期靜態綁定允許您在運行時而不是在定義方法時確定靜態方法呼叫的目標類別。這是使用 get_used_class() 函數實現的,該函數傳回呼叫靜態方法的類別的名稱。

例如:

<code class="php">class Action {
    public static function n() {
        return get_called_class();
    }
}

class MyAction extends Action {

}

echo MyAction::n(); // Outputs "MyAction"</code>
登入後複製

2。使用get_class($this) (僅限非靜態方法):

如果相關方法不是靜態的,您可以使用get_class($this) 取得類別呼叫方法的名稱。

例如:

<code class="php">class Action {
    public function n() {
        echo get_class($this);
    }
}

class MyAction extends Action {

}

$foo = new MyAction;
$foo->n(); // Outputs "MyAction"</code>
登入後複製

結論:

後期靜態綁定和get_class($this)提供從類別中擴展的靜態方法來擴展檢索類別名稱的解決方案。後期靜態綁定更適合靜態方法,而 get_class($this) 對於非靜態方法很有用。

以上是如何在靜態方法呼叫中從擴充 PHP 類別取得類別名稱?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板