從擴展PHP 類別靜態呼叫中獲取類別名稱
在物件導向程式設計中,類別經常擴展基底類別來繼承和擴展其功能。常見場景涉及需要從擴展類別中的靜態方法呼叫獲取類別名,儘管 CLASS 始終返回定義類別的名稱。
問題:父靜態方法中類別名稱無法存取
考慮一個有兩個類別的場景,Action和MyAction,其中MyAction 擴展了Action。 Action 定義了一個靜態方法n(),該方法無法透過父靜態方法中的CLASS 常數訪問,從而導致CLASS無論呼叫如何,值都設定為「操作」
解決方案:
1.後期靜態綁定(PHP 5.3 ):
後期靜態綁定可讓您在執行時間而不是在定義方法時確定靜態方法呼叫的目標類別。這是使用 get_used_class() 函數實現的,該函數傳回呼叫靜態方法的類別的名稱。
例如:
class Action {
public static function n() {
return get_called_class();
}
}
class MyAction extends Action {
}
echo MyAction::n(); // Outputs "MyAction"
2.使用get_class($this) (僅限非靜態方法):
如果相關方法不是靜態的,則可以使用get_class($this) 來取得類別呼叫方法的名稱。
例如:
class Action {
public function n() {
echo get_class($this);
}
}
class MyAction extends Action {
}
$foo = new MyAction;
$foo->n(); // Outputs "MyAction"
結論:
後期靜態綁定和get_class($this) 都提供了從靜態方法呼叫中檢索類別名稱的解決方案擴展課程。後期靜態綁定更適合靜態方法,而 get_class($this) 對於非靜態方法很有用。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3