静的メソッド呼び出しで拡張 PHP クラスからクラス名を取得する方法

Susan Sarandon
リリース: 2024-11-01 10:10:29
オリジナル
997 人が閲覧しました

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

拡張 PHP クラス静的呼び出しからクラス名を取得する

オブジェクト指向プログラミングでは、クラスは多くの場合、基本クラスを拡張してその機能を継承および拡張します。 。一般的なシナリオでは、CLASS が常に定義クラスの名前を返すにもかかわらず、拡張クラスの静的メソッド呼び出しからクラス名を取得する必要があります。

問題: 親静的メソッド

のクラス名にアクセスできないActionMyAction という 2 つのクラス (MyAction) があるシナリオを考えます。 アクションを拡張します。 Action は静的メソッド n() を定義しますが、親静的メソッド内の CLASS 定数からはアクセスできず、結果として CLASS が生成されます。呼び出しクラスに関係なく、値は「アクション」に設定されます。

解決策:

1.後期静的バインディング (PHP 5.3 ):

後期静的バインディングを使用すると、メソッドの定義時ではなく、実行時に静的メソッド呼び出しのターゲット クラスを決定できます。これは、get_called_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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!