ホームページ  >  記事  >  バックエンド開発  >  拡張 PHP クラスの静的メソッド呼び出しからサブクラス名を取得するにはどうすればよいですか?

拡張 PHP クラスの静的メソッド呼び出しからサブクラス名を取得するにはどうすればよいですか?

DDD
DDDオリジナル
2024-10-30 05:58:02188ブラウズ

How Can I Retrieve the Subclass Name from a Static Method Call in Extended PHP Classes?

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

ソフトウェア エンジニアリングでは、継承によりクラスがそのクラスからプロパティと機能を継承できるようになります。親クラス。 PHP では、クラスをサブクラスで拡張すると、親クラスで定義されたプロパティとメソッドにアクセスできます。ただし、親クラスの静的メソッド内からサブクラスの名前にアクセスするのは難しい場合があります。

問題:

親クラスの Action とAction を継承するサブクラス MyAction。サブクラス内から静的に呼び出されたときにサブクラスの名前を返すメソッドを Action クラスで開発したいと考えています。ただし、親クラスで __CLASS__ 変数を使用すると、常に親クラスの名前が返され、これは望ましい結果ではありません。

解決策 1: Late Static Binding (PHP 5.3 ):

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(); //displays MyAction</code>

この例では、 get_called_class() 関数は、メソッドが親クラス Action で定義されている場合でも、サブクラス MyAction の名前を返します。このアプローチは、この問題に対する直接的な解決策を提供します。

解決策 2: 動的クラス名の取得 (PHP 5.2 ):

PHP バージョンでは後期静的バインディングは利用できませんが、 5.3 より前では、クラス名を動的に取得する別のメソッドがあります。

<code class="php">class Action {
    public function n() {
        $object = new ReflectionObject($this);
        return $object->getName();
    }
}

class MyAction extends Action {

}

$myAction = new MyAction();
echo $myAction->n(); //displays MyAction</code>

このアプローチでは、現在のオブジェクトの ReflectionObject インスタンスを作成し、getName() メソッドを使用してクラス名を取得します。 。このソリューションは PHP バージョン 5.2 までで動作しますが、リフレクション オブジェクトを作成する追加の手順が必要です。

以上が拡張 PHP クラスの静的メソッド呼び出しからサブクラス名を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。