拡張 PHP クラス静的呼び出しからクラス名を取得する
オブジェクト指向プログラミングでは、クラスは多くの場合、基本クラスを拡張してその機能を継承および拡張します。 。一般的なシナリオでは、CLASS が常に定義クラスの名前を返すにもかかわらず、拡張クラスの静的メソッド呼び出しからクラス名を取得する必要があります。
問題: 親静的メソッド
のクラス名にアクセスできないAction と MyAction という 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 サイトの他の関連記事を参照してください。