PHP7.0 では、いくつかの新しいリフレクション機能が導入され、PHP クラスとオブジェクトのメタ情報の処理が容易になります。リフレクションは、クラス、インターフェイス、関数、メソッド、プロパティを動的に取得して操作する機能で、ドキュメント、デバッグ ツール、プラグイン フレームワークなどを自動的に生成するために使用できます。
今回は、PHP7.0でリフレクションクラスやメソッド、プロパティの取得や操作など、リフレクション処理を行う方法を紹介します。
リフレクション クラスはリフレクションの基礎であり、ReflectionClass
クラスを使用してクラスのメタ情報を取得できます。以下に例を示します。
class Foo { public $prop1; private $prop2; protected $prop3; function __construct($arg) { // ... } public static function bar() { // ... } private function baz($arg) { // ... } } $ref = new ReflectionClass('Foo'); echo $ref->getName(); // 输出 Foo
上記の例では、new ReflectionClass('Foo')
を使用してクラス Foo
のリフレクション オブジェクトを取得し、次に次を使用します。 getName()
クラス名を取得するメソッド。
リフレクション クラスを通じて、属性、メソッド、定数など、クラスの他のメタ情報を取得できます。以下にいくつかの例を示します。
// 获取类的属性 $props = $ref->getProperties(); foreach ($props as $prop) { echo $prop->getName(); } // 获取类的方法 $methods = $ref->getMethods(); foreach ($methods as $method) { echo $method->getName(); } // 获取类的常量 $consts = $ref->getConstants(); foreach ($consts as $name => $value) { echo $name . ' => ' . $value; }
これに加えて、次のようにリフレクション クラスを使用してクラスのインスタンスを作成することもできます。
$instance = $ref->newInstanceArgs([$arg1, $arg2]);
Reflection メソッドこれは、次の一部です。リフレクション クラス ReflectionMethod
クラスを使用して、メソッドのメタ情報を取得できます。以下に例を示します。
class Foo { public static function bar() { // ... } private function baz($arg) { // ... } } $ref = new ReflectionMethod('Foo', 'bar'); echo $ref->getName(); // 输出 bar
上の例では、new ReflectionMethod('Foo', 'bar')
を使用して、Foo
クラスの # を取得します。 ##bar() メソッドのリフレクション オブジェクトを取得し、
getName() メソッドを使用してメソッド名を取得します。
// 获取方法的参数 $params = $ref->getParameters(); foreach ($params as $param) { echo $param->getName(); } // 获取方法的返回值 $return = $ref->getReturnType(); echo $return->getName(); // 获取方法的修饰符 $modifiers = $ref->getModifiers(); echo $modifiers;
$instance = new Foo(); $args = ['arg1', 'arg2']; $result = $ref->invokeArgs($instance, $args);
ReflectionProperty クラスを使用してプロパティのメタ情報を取得できます。例を次に示します。
class Foo { public $prop1; private $prop2; protected static $prop3; } $ref = new ReflectionProperty('Foo', 'prop1'); echo $ref->getName(); // 输出 prop1
new ReflectionProperty('Foo', 'prop1') を使用して、
Foo クラスの # を取得します。 ##prop1
プロパティのリフレクション オブジェクトを指定し、getName()
メソッドを使用してプロパティ名を取得します。 リフレクション プロパティを使用して、プロパティ修飾子、デフォルト値、その他の情報を取得することもできます:
// 获取属性的修饰符 $modifiers = $ref->getModifiers(); echo $modifiers; // 获取属性的默认值 $default = $ref->getDefaultValue(); echo $default;
さらに、リフレクション プロパティを使用してプロパティ値を設定および取得することもできます:
$instance = new Foo(); $ref->setValue($instance, 'new value'); $value = $ref->getValue($instance);
結論
、ReflectionMethod
、および ReflectionProperty
クラスを使用して、クラス、メソッド、およびプロパティの情報を取得および操作できます。これらのリフレクション機能により、PHP はより柔軟で拡張可能になります。
以上がPHP7.0でリフレクション処理をするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。