ホームページ >バックエンド開発 >PHPチュートリアル >php Reflectionの詳細説明 反映機構例

php Reflectionの詳細説明 反映機構例

伊谢尔伦
伊谢尔伦オリジナル
2017-07-01 10:44:411479ブラウズ

PHP5 には、リフレクションという新しい機能が追加されています。この機能により、プログラマーは

リバース エンジニアリング [リバース エンジニアリング] クラス、インターフェイス、関数、メソッド、拡張機能 [拡張ライブラリのサポート] を行うことができます。

PHP コードを通じて、オブジェクトのすべての情報を取得し、オブジェクトと対話することができます。

次の Person クラスを想定します:

class Person {
    /**
     * For the sake of demonstration, we"re setting this private
     */
    private $_allowDynamicAttributes = false;
    
    /**
     * type=primary_autoincrement
     */
    protected $id = 0;
    
    /**
     * type=varchar length=255 null
     */
    protected $name;
    
    /**
     * type=text null
     */
    protected $biography;
    public function getId() {
        return $this->id;
    }
    public function setId($v) {
        $this->id = $v;
    }
    public function getName() {
        return $this->name;
    }
    public function setName($v) {
        $this->name = $v;
    }
    public function getBiography() {
        return $this->biography;
    }
    public function setBiography($v) {
        $this->biography = $v;
    }
}

ReflectionClass を通じて、次の Person クラスの情報を取得できます:

  • ConstantContants

  • プロパティ名

  • メソッド名

  • 静的プロパティ 静的プロパティ

  • Namespace Namespace

  • Personクラスがfinalかabstractか

ReflectionClass:

 $class = new ReflectionClass('Person');

* プロパティ(Properties)を取得:


$properties = $class->getProperties();
foreach($properties as $property) {
    echo $property->getName()."\n";
}
// 输出:
// _allowDynamicAttributes
// id
// name
// biography

デフォルトでは、ReflectionClass はプライベートおよび保護されたプロパティを含むすべてのプロパティを取得します。プライベート属性のみを取得したい場合は、追加のパラメーターを渡す必要があります:


ReflectionProperty::IS_STATIC

    ReflectionProperty::IS_PUBLIC
  • Reflectionプロパティ: : IS_PROTECTED
  • ReflectionProperty::IS_PRIVATE
  • パブリックプロパティとプライベートプロパティの両方を取得したい場合は、次のように記述します: ReflectionProperty::IS_PUBLIC | ReflectionProtected::IS_PROTECTED
  • $property を通じてプロパティ名を取得できます。 ->getName()、getDocComment を渡すと、プロパティに書き込まれたコメントを取得できます。

 $private_properties = $class->getProperties(ReflectionProperty::IS_PRIVATE);

ちょっと信じられないですね。コメントも取得できます。

* メソッドの取得
: getMethods() を通じてクラスのすべてのメソッドを取得します。返されるのは、ReflectionMethod オブジェクトの

配列

です。

これ以上のデモはありません。 * 最後に、ReflectionMethod を通じてクラス内のメソッドを呼び出します。

りー

以上がphp Reflectionの詳細説明 反映機構例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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