phpでのリフレクションの詳細な説明と分析例

墨辰丷
リリース: 2023-03-29 08:08:01
オリジナル
1382 人が閲覧しました

この記事では、主に PHP のリフレクション コンテンツの知識を紹介します。ここでは、関連情報と簡単なサンプル コードを提供します。興味のある方は参考にしてください。最近、Java プログラミングのアイデアを読んでいて、型情報の章を目にしました。授業の情報と振り返りの概念について話しました。さて、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 クラスを処理して、どのコントローラーとどのメソッドを取得することができます。次にメソッドを実行します。

要約: 上記がこの記事の全内容です。皆様の学習に役立つことを願っています。

関連する推奨事項:

phpWeChatパブリックプラットフォームのインタラクションとインターフェイスの詳細な説明

phpファイルアップロードの詳細な説明

phpWeChatパブリックアカウントjs-sd K開発アプリケーション

以上がphpでのリフレクションの詳細な説明と分析例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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