CodeZine(コードジン)

特集ページ一覧

PHP5の新機能「リフレクションAPI」とその使用法

便利なリフレクション機能を試す

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2008/01/16 14:00

ダウンロード サンプルソース (3.6 KB)

リフレクションAPIを利用すると、PHPのクラスについての情報を取得したり、クラスのメソッドを実行したりできます。ここではその方法について説明します。

目次

はじめに

 この記事で紹介する機能は、PHP4からPHP5にまだアップグレードしていない人にとっては、大いに心引かれる機能だと思います。それは、PHP5で新たにサポートされたリフレクションAPIです。リフレクションAPIを使用することで、変数、インターフェイス、関数、メソッド、パラメータ、クラスなどの詳細情報を入手できます。リフレクションAPIは機能が豊富で、多数のクラスやメソッドを利用してリフレクションを実現できます。

 この記事ではまず、リフレクションAPIの概念について理解していただくために、リフレクションAPIのクラスとメソッドについて、短い例を交えて簡単に説明します。その後で、PHPで作成した実際的なサンプルアプリケーションを2つ紹介します。1つは、呼び出すメソッドを実行時に判別するアプリケーションで、もう1つは、PHPクラスの情報を示す整形されたHTMLドキュメントを自動生成するアプリケーションです。

リフレクションAPIのクラスとメソッド

 リフレクションAPIの機能の概略を示すために、リフレクションAPIのクラスとメソッド、およびそれらの関係を表す図を紹介します(図1)。これを見るとわかるように、リフレクションAPIのほとんどのクラスは、Reflectorインターフェイスを実装しています(Reflection、ReflectionException、およびReflectionFunctionAbstractは除く)。エクスポート可能なすべてのリフレクションクラスがReflectorインターフェイスを実装しています。

図1 リフレクションAPIのクラスとメソッド
図1 リフレクションAPIのクラスとメソッド

ReflectionClass

 ReflectionClassクラスは、リフレクションAPIの主役となるクラスです。このクラスを使用することで、他のクラス群へのリフレクションを適用し、その時点での全クラスコンポーネントについての情報を抽出します。ReflectionClassのメソッドにはよく似たものが多いので、ここでは、いくつかのメソッドについてのみ使用例を紹介し、残りはメソッド名と説明を示すにとどめます。

  • public void construct(string name) ― ReflectionClassのコンストラクタです。
  • public string getName() ― 調査したクラス名を返します。
  •    // EXAMPLE
       $class = new ReflectionClass('TestClass');
       echo "The class name: ".$class->getName();
    
  • public ReflectionMethod getConstructor() ― 解析されたクラスコンストラクタを表すReflectionMethodオブジェクトを返します。
  •    // EXAMPLE
       $class = new ReflectionClass('TestClass');
       $constructor = $class->getConstructor();
       echo $constructor;
    
  • public ReflectionMethod getMethod(string name) ― nameパラメータで指定したメソッドを表すReflectionMethodオブジェクトを返します。
  •    // EXAMPLE
       $class = new ReflectionClass('TestClass');
       $method = $class->getMethod('testMethod_1');
       echo $method;
    
  • public ReflectionMethod[] getMethods() ― 解析されたすべてのクラスメソッドを表すRelectionMethodオブジェクトの配列を返します。
  •    // EXAMPLE
       $class = new ReflectionClass('TestClass');
       $methods = $class->getMethods();
       foreach($methods as $in)
          { echo $in; }
    

 このクラスには、上記の挙げたメソッドの他にも、以下のような同様のメソッドがあります。使い方も同様です。つまり、調査するクラスの名前をパラメータで渡してReflectionClassのインスタンスを作成し、そのインスタンスを使用して以下のメソッドを呼び出します。

  • public ReflectionProperty getProperty(string name)
  • public ReflectionProperty[] getProperties()
  • public mixed getConstant(string name)
  • public array getConstants()
  • public ReflectionClass[] getInterfaces()

 以上のメソッドで取得したオブジェクトを使用すると、クラスの内部をさらに掘り下げた情報にアクセスできます。これについて、次のセクションで説明します。


  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

あなたにオススメ

著者プロフィール

  • Octavia Andreea Anghel(Octavia Andreea Anghel)

    経験豊富なPHP開発者。現在は、国内外のソフトウェア開発コンテストに参加するプログラミングチームの主任トレーナーを務める。国レベルの教育プロジェクト開発のコンサルティングも担当している。共著書に『XML technologies?XML in Java』があり、XML部分の執筆を担当。PHPやXML...

  • japan.internet.com(ジャパンインターネットコム)

    japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.com や EarthWeb.c...

バックナンバー

連載:japan.internet.com翻訳記事

もっと読む

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5