Xin Xing に従って、PHP のリフレクション メカニズムについて詳しく説明します
以前 Java を学習していたとき、マルチスレッドを学習した後にリフレクションを学習したことをはっきりと覚えています。もちろん、PHP にはリフレクション メカニズムがあります。あなたはまだ子供です。理解できない場合は、理解する必要があります。結局のところ、内省の機能は非常に強力であり、それを学ぶことは実用的に非常に重要です。 リフレクションを簡単に理解すると、クラスを取得し、そのクラスがどのようなメソッドを持っているか、どのようなパラメータを持っているかなど、このクラスに関する情報を取得するということです。もちろん、そのメソッドや他の関数、およびその目的を動的に呼び出すこともできます。プラグインを自動的にロードしたり、ドキュメントを自動生成したりすることで、PHP 言語を拡張できます。
ほとんどすべてのリフレクション クラスはリフレクター インターフェイスを実装しています。すべての実装クラスには、エクスポート メソッドというメソッドが 1 つあります。ここでは、最初の PHP の組み込みクラスとして使用します。リフレクションの基本的な使用法を見てみるために、次のコードで新しい php ファイルを作成してみましょう:
<?php$class = new ReflectionClass("mysqli");Reflection::export($class);
この部分の出力情報は次のとおりです。 >
Class [ class mysqli ] { - Constants [0] { } - Static properties [0] { } - Static methods [1] { Method [ static public method poll ] { - Parameters [5] { Parameter #0 [ array or NULL &$read ] Parameter #1 [ array or NULL &$write ] Parameter #2 [ array or NULL &$error ] Parameter #3 [ $sec ] Parameter #4 [ $usec ] } } } - Properties [19] { Property [ public $affected_rows ] Property [ public $client_info ] Property [ public $client_version ] Property [ public $connect_errno ] Property [ public $connect_error ] Property [ public $errno ] Property [ public $error ] Property [ public $error_list ] Property [ public $field_count ] Property [ public $host_info ] Property [ public $info ] Property [ public $insert_id ]
次に、上記のコードを実行すると、出力情報が次のとおりであることがわかります。
<?phpclass Person{ public $name; /** *仅仅用来打印信息 */ public function test(){ echo "辛星加油"; }}foreach(get_declared_classes() as $class){ $myclass = new ReflectionClass($class); if($myclass->isUserDefined()){ Reflection::export($myclass); }}
var_dump を通じてクラスに関する情報を取得できると言う人もいるかもしれません。はい、var_dump を使用して何が出力されるかを見てみましょう。 >
Class [ class Person ] { @@ D:\MyApp\wamp\www\ap.php 2-10 - Constants [0] { } - Static properties [0] { } - Static methods [0] { } - Properties [1] { Property [ public $name ] } - Methods [1] { /** *仅仅用来打印信息 */ Method [ public method test ] { @@ D:\MyApp\wamp\www\ap.php 7 - 9 } } }
<?phpclass Person{ public $name; /** *仅仅用来打印信息 */ public function test(){ echo "辛星加油"; }}$person = new Person();$person->name = "xinxing";var_dump($person);
<strong>object</strong>(<em>Person</em>)[<em>1</em>] <em>public</em> 'name' <span style="color:#888a85">=></span> <small>string</small> <span style="color:#cc0000">'xinxing'</span> <em>(length=7)</em>
離れないで、私のブログはリフレクションの応用についての記事を書き続けます。少し長いので、別のブログを開きたいと思います。