この記事では、特定の参照値を持つ PHP のリフレクション クラスを紹介します。必要な友達はそれを参照できます
。
著者: @keenleung
目次
リフレクションとは何ですか?PHPプログラムの実行状態での解析を拡張し、クラス、メソッド、プロパティ、パラメータなどの詳細情報をコメントも含めてエクスポートまたは抽出することを指します。この動的に情報を取得し、オブジェクトのメソッドを動的に呼び出す機能をリフレクションAPIと呼びます。リフレクションは、オブジェクト指向パラダイムでメタモデルを操作するための API であり、非常に強力で、複雑でスケーラブルなアプリケーションの構築に役立ちます。
その用途には、プラグインの自動ロード、ドキュメントの自動生成が含まれ、PHP 言語の拡張にも使用できます。
PHP リフレクション API は、プログラムのメタデータにアクセスしたり、関連する注釈と対話したりするのに役立ついくつかのクラスで構成されています。リフレクションの助けを借りて、クラスによって実装されたメソッドを取得し、クラスのインスタンスを作成し (new による作成とは異なります)、メソッドを呼び出し (これも通常の呼び出しとは異なります)、パラメーターを渡し、静的メソッドを動的に呼び出すことができます。クラスのメソッド。Reflection API は、いくつかのクラス、例外、インターフェイスを含む PHP の組み込み OOP テクノロジ拡張機能であり、これらを一緒に使用すると、他のクラス、インターフェイス、メソッド、プロパティ、メソッド、拡張機能の分析に役立ちます。これらの OOP 拡張はリフレクションと呼ばれます。
通常は、たとえば ReflectionClass クラスと ReflectionMethod クラスを使用します。
コードは次のとおりです。
1 ReflectionClass を通じて、次の情報を取得できます: 定数
3. メソッド名 静的プロパティ
5. 名前空間
代码如下:
$class = new ReflectionClass('Person'); // 建立 Person这个类的反射类 $instance = $class->newInstanceArgs($args); // 相当于实例化Person 类
1)获取属性(Properties):
代码如下:
$properties = $class->getProperties();foreach ($properties as $property) { echo $property->getName() . "\n"; }// 输出: // _allowDynamicAttributes // id // name // biography
默认情况下,ReflectionClass会获取到所有的属性,private 和 protected的也可以。如果只想获取到private属性,就要额外传个参数:
代码如下:
$private_properties = $class->getProperties(ReflectionProperty::IS_PRIVATE);
可用参数列表:
代码如下:
ReflectionProperty::IS_STATIC ReflectionProperty::IS_PUBLIC ReflectionProperty::IS_PROTECTED ReflectionProperty::IS_PRIVATE
通过$property->getName()可以得到属性名。
2)获取注释:
通过getDocComment可以得到写给property的注释。
代码如下:
foreach ($properties as $property) { if ($property->isProtected()) { $docblock = $property->getDocComment(); preg_match('/ type\=([a-z_]*) /', $property->getDocComment(), $matches); echo $matches[1] . "\n"; } }// Output: // primary_autoincrement // varchar // text
3)获取类的方法
代码如下:
getMethods() 来获取到类的所有methods。 hasMethod(string) 是否存在某个方法 getMethod(string) 获取方法
4)执行类的方法:
代码如下:
->getName(); = ->getmethod('getName'); ->invoke(); = ->getmethod('setName'); ->invokeArgs(, ('snsgou.com'
二、通过ReflectionMethod,我们可以得到Person类的某个方法的信息:
1.是否“public”、“protected”、“private” 、“static”类型
2.方法的参数列表
3.方法的参数个数
4.反调用类的方法
代码如下:
// 执行detail方法 $method = new ReflectionMethod('Person', 'test'); if ($method->isPublic() && !$method->isStatic()) { echo 'Action is right'; }echo $method->getNumberOfParameters(); // 参数个数 echo $method->getParameters(); // 参数对象数组
----->>>
相关推荐:
以上がPHP のリフレクション クラスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。