ホームページ >バックエンド開発 >PHPチュートリアル >PHP のリフレクション クラス

PHP のリフレクション クラス

不言
不言オリジナル
2018-04-26 11:52:502729ブラウズ

この記事では、特定の参照値を持つ PHP のリフレクション クラスを紹介します。必要な友達はそれを参照できます

PHP のリフレクション クラス ReflectionClass と ReflectionMethod の使用例




著者: @keenleung

この記事は著者によるオリジナルです。転載する場合は出典を明記してください: https://www.cnblogs.com/KeenLeung/p/6041280.html


目次


PHP5 は完全なリフレクション API を備えており、クラス、インターフェイス、関数、メソッド、拡張機能をリバース エンジニアリングする機能が追加されています。

リフレクションとは何ですか?

PHPプログラムの実行状態での解析を拡張し、クラス、メソッド、プロパティ、パラメータなどの詳細情報をコメントも含めてエクスポートまたは抽出することを指します。この動的に情報を取得し、オブジェクトのメソッドを動的に呼び出す機能をリフレクションAPIと呼びます。リフレクションは、オブジェクト指向パラダイムでメタモデルを操作するための API であり、非常に強力で、複雑でスケーラブルなアプリケーションの構築に役立ちます。

その用途には、プラグインの自動ロード、ドキュメントの自動生成が含まれ、PHP 言語の拡張にも使用できます。

PHP リフレクション API は、プログラムのメタデータにアクセスしたり、関連する注釈と対話したりするのに役立ついくつかのクラスで構成されています。リフレクションの助けを借りて、クラスによって実装されたメソッドを取得し、クラスのインスタンスを作成し (new による作成とは異なります)、メソッドを呼び出し (これも通常の呼び出しとは異なります)、パラメーターを渡し、静的メソッドを動的に呼び出すことができます。クラスのメソッド。

Reflection API は、いくつかのクラス、例外、インターフェイスを含む PHP の組み込み OOP テクノロジ拡張機能であり、これらを一緒に使用すると、他のクラス、インターフェイス、メソッド、プロパティ、メソッド、拡張機能の分析に役立ちます。これらの OOP 拡張はリフレクションと呼ばれます。

通常は、たとえば ReflectionClass クラスと ReflectionMethod クラスを使用します。

コードは次のとおりです。

1 ReflectionClass を通じて、次の情報を取得できます: 定数

3. メソッド名 静的プロパティ
5. 名前空間

6.それは最終的なものですか? それとも抽象的なものですか? 7. Person クラスには特定のメソッドがありますか? 次に、それを反映するには、クラス名「person」を ReflectionClass に渡すだけです。

代码如下:



$class = new ReflectionClass('Person'); // 建立 Person这个类的反射类  
$instance  = $class->newInstanceArgs($args); // 相当于实例化Person 类


 

1)获取属性(Properties):

 代码如下:



PHP のリフレクション クラス

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

PHP のリフレクション クラス

 

默认情况下,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的注释。

代码如下:



PHP のリフレクション クラス

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

PHP のリフレクション クラス

 

3)获取类的方法

 代码如下:


getMethods()       来获取到类的所有methods。
hasMethod(string)  是否存在某个方法
getMethod(string)  获取方法


 

 4)执行类的方法:

代码如下:



PHP のリフレクション クラス

->getName();  = ->getmethod('getName'); ->invoke();     = ->getmethod('setName'); ->invokeArgs(, ('snsgou.com'

PHP のリフレクション クラス

 

二、通过ReflectionMethod,我们可以得到Person类的某个方法的信息:

1.是否“public”、“protected”、“private” 、“static”类型
2.方法的参数列表
3.方法的参数个数
4.反调用类的方法

代码如下:



PHP のリフレクション クラス

// 执行detail方法
$method = new ReflectionMethod('Person', 'test'); 

if ($method->isPublic() && !$method->isStatic()) { 
echo 'Action is right';
}echo $method->getNumberOfParameters(); // 参数个数
echo $method->getParameters(); // 参数对象数组

PHP のリフレクション クラス

 

 

----->>>

相关推荐:

php中的时间函数

php中的文件操作

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

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