クラスのメンバーがプライベートとして定義されている場合でも、外部からアクセスすることができ、クラスのインスタンスを作成しなくても、クラスのメンバーやメソッドにアクセスできます。
PHP はバージョン 5.0 以降、リフレクション メカニズムを追加しました。これにより、PHP 実行環境でアクセスできる一連の強力なリフレクション API が提供されます。クラス、メソッド、プロパティ、パラメータ、コメントなどを使用します。その機能は非常に強力です。、拡張性の高い PHP フレームワークでよく使用され、プラグインの自動ロード、ドキュメントの自動生成、さらには拡張に使用することもできます。 PHP言語。 (推奨学習: PHP プログラミングの入門から熟練度まで )
これは PHP の組み込み oop 拡張機能であり、言語自体の機能であるため、追加の拡張機能を追加したり、使用するように設定したりする必要はありません。
PHP リフレクション API は、クラス、メソッド、属性、パラメーターなどに基づいて対応するリフレクション クラスを維持し、対応する呼び出し API を提供します。
アクセス
クラス User が定義されていると仮定すると、最初にこのクラスのリフレクション クラス インスタンスを作成する必要があります。次に、このインスタンスに基づいて、ユーザーのプロパティまたはメソッドにアクセスできます。クラス内に定義されたメンバ権限宣言がpublicであるかどうかに関係なく取得できます。
<?php namespace Extend; use ReflectionClass; use Exception; /** * 用户相关类 * Class User * @package Extend */ class User{ const ROLE = 'Students'; public $username = ''; private $password = ''; public function __construct($username, $password) { $this->username = $username; $this->password = $password; } /** * 获取用户名 * @return string */ public function getUsername() { return $this->username; } /** * 设置用户名 * @param string $username */ public function setUsername($username) { $this->username = $username; } /** * 获取密码 * @return string */ private function getPassword() { return $this->password; } /** * 设置密码 * @param string $password */ private function setPassowrd($password) { $this->password = $password; } } $class = new ReflectionClass('Extend\User'); // 将类名User作为参数,即可建立User类的反射类 $properties = $class->getProperties(); // 获取User类的所有属性,返回ReflectionProperty的数组 $property = $class->getProperty('password'); // 获取User类的password属性ReflectionProperty $methods = $class->getMethods(); // 获取User类的所有方法,返回ReflectionMethod数组 $method = $class->getMethod('getUsername'); // 获取User类的getUsername方法的ReflectionMethod $constants = $class->getConstants(); // 获取所有常量,返回常量定义数组 $constant = $class->getConstant('ROLE'); // 获取ROLE常量 $namespace = $class->getNamespaceName(); // 获取类的命名空间 $comment_class = $class->getDocComment(); // 获取User类的注释文档,即定义在类之前的注释 $comment_method = $class->getMethod('getUsername')->getDocComment(); // 获取User类中getUsername方法的注释文档
注: use キーワードが使用されている場合でも、リフレクション クラスの作成時に渡されるクラス名には、完全な名前空間が含まれている必要があります。そうしないと、クラス名が見つからない場合に例外がスローされます。
以上がリフレクションを実装するためにphpが提供するものは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。