PHPでのリフレクションの詳しい説明とサンプルコード

高洛峰
リリース: 2023-03-04 07:48:01
オリジナル
1307 人が閲覧しました

最近『Java Programming Thoughts』を読んでいたところ、型情報に関する章があり、クラス情報とリフレクションの概念について説明されていました。さて、phpのリフレクションツールをおさらいしてみましょう。マニュアルには次のように書かれています: 「PHP 5 には完全なリフレクション API があり、クラス、インターフェイス、関数、メソッド、および拡張機能をリバース エンジニアリングする機能が追加されています。さらに、リフレクション API は、関数、クラス、および拡張機能のリフレクションを取得するメソッドを提供します。メソッド。" ドキュメントのコメント。" もちろん、マニュアルは少し抽象的です。いわゆるリバース エンジニアリングとは、コメントを含むクラス、メソッド、属性、パラメーターなどに関する詳細情報を取得することです。テキストはいつも非常に退屈です。たとえば、

class Foo {
  public  $foo = 1;
  protected $bar = 2;
  private  $baz = 3;
   
  /**
   * Enter description here ...
   */
  public function myMethod()
  {
    echo 'hello 2b';
  }
}
 
$ref = new ReflectionClass('Foo');
$props = $ref->getProperties();
foreach ($props as $value) {
  echo $value->getName()."\n";
}
 
//output
//foo 
//bar
//baz
ログイン後にコピー

ReflectionClass このクラスは、特定のクラスに関する関連情報を返します。属性、メソッド、名前空間、それらのインターフェイスの実装などとして。前の例では、ReflectionClass::getProperties は ReflectionProperty オブジェクトの配列を返しました。

ReflectionProperty クラスは、クラスのプロパティに関する情報を報告します。たとえば、isDefault isPrivate isProtected isPublic isStatic など、メソッド getName は属性の名前を取得します。

上記は属性を取得するためのものですが、

class Foo {
  public  $foo = 1;
  protected $bar = 2;
  private  $baz = 3;
   
  /**
   * Enter description here ...
   */
  public function myMethod()
  {
    echo 'hello 2b';
  }
}
 
$ref = new ReflectionClass('Foo');
$method = $ref->getMethod('myMethod');
$method->invoke($ref->newInstance());
ログイン後にコピー

ReflectionClass::getMethod などのクラス メソッドを取得するためのメソッドもあります。ReflectionMethod クラスは、isAbstract isPrivate isProtected isPublic isStatic isConstructor などのメソッドに関する情報を報告します。重要なメソッド Invoke と InvokeArgs は実行メソッドです。

他のオブジェクトについては、マニュアルを読むことができます、それは難しくありません!

リフレクションの用途は何ですか?

リフレクションは動的に実行される概念であり、これらを組み合わせて使用​​すると、他のクラス、インターフェイス、メソッド、プロパティ、メソッド、拡張機能の分析に役立ちます。動的プロキシなどのパターンを構築することもできます。 kohana や yii などの一部の PHP フレームワークではリフレクションを使用することも非常に一般的です。以下は、リフレクションを使用する mvc を実装するための kohana のコードです。

// Start validation of the controller
$class = new ReflectionClass(ucfirst(Router::$controller).'_Controller');
// Create a new controller instance
$controller = $class->newInstance();
// Load the controller method
$method = $class->getMethod(Router::$method);
// Execute the controller method
$method->invokeArgs($controller, $arguments);
ログイン後にコピー

上記のコードは、このフレームワークのプロセスを明確に見ることができます。 Router を介して、実際に URL クラスを処理して、どのコントローラーとどのメソッドを取得することができます。次に、メソッドを実行します。

上記はPHPリフレクションに関する情報をまとめたものです。今後も関連情報を追加していきますので、どうぞよろしくお願いいたします。

PHP リフレクションの詳細とサンプル コード関連の記事については、PHP 中国語 Web サイトに注目してください。

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