ホームページ  >  記事  >  バックエンド開発  >  リフレクションを実装するためにphpが提供するものは何ですか

リフレクションを実装するためにphpが提供するものは何ですか

(*-*)浩
(*-*)浩オリジナル
2019-09-17 13:06:051783ブラウズ

クラスのメンバーがプライベートとして定義されている場合でも、外部からアクセスすることができ、クラスのインスタンスを作成しなくても、クラスのメンバーやメソッドにアクセスできます。

リフレクションを実装するためにphpが提供するものは何ですか

PHP はバージョン 5.0 以降、リフレクション メカニズムを追加しました。これにより、PHP 実行環境でアクセスできる一連の強力なリフレクション API が提供されます。クラス、メソッド、プロパティ、パラメータ、コメントなどを使用します。その機能は非常に強力です。、拡張性の高い PHP フレームワークでよく使用され、プラグインの自動ロード、ドキュメントの自動生成、さらには拡張に使用することもできます。 PHP言語。 (推奨学習: PHP プログラミングの入門から熟練度まで )

これは PHP の組み込み oop 拡張機能であり、言語自体の機能であるため、追加の拡張機能を追加したり、使用するように設定したりする必要はありません。

PHP リフレクション API は、クラス、メソッド、属性、パラメーターなどに基づいて対応するリフレクション クラスを維持し、対応する呼び出し API を提供します。

リフレクションを実装するためにphpが提供するものは何ですか

アクセス

クラス User が定義されていると仮定すると、最初にこのクラスのリフレクション クラス インスタンスを作成する必要があります。次に、このインスタンスに基づいて、ユーザーのプロパティまたはメソッドにアクセスできます。クラス内に定義されたメンバ権限宣言がpublicであるかどうかに関係なく取得できます。

<?php 
namespace Extend;

use ReflectionClass;
use Exception;

/**
 * 用户相关类
 * Class User
 * @package Extend
 */
class User{
    const ROLE = &#39;Students&#39;;
    public $username = &#39;&#39;;
    private $password = &#39;&#39;;

    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(&#39;Extend\User&#39;);  // 将类名User作为参数,即可建立User类的反射类
$properties = $class->getProperties();  // 获取User类的所有属性,返回ReflectionProperty的数组
$property = $class->getProperty(&#39;password&#39;); // 获取User类的password属性ReflectionProperty
$methods = $class->getMethods();   // 获取User类的所有方法,返回ReflectionMethod数组
$method = $class->getMethod(&#39;getUsername&#39;);  // 获取User类的getUsername方法的ReflectionMethod
$constants = $class->getConstants();   // 获取所有常量,返回常量定义数组
$constant = $class->getConstant(&#39;ROLE&#39;);   // 获取ROLE常量
$namespace = $class->getNamespaceName();  // 获取类的命名空间
$comment_class = $class->getDocComment();  // 获取User类的注释文档,即定义在类之前的注释
$comment_method = $class->getMethod(&#39;getUsername&#39;)->getDocComment();  // 获取User类中getUsername方法的注释文档

注: use キーワードが使用されている場合でも、リフレクション クラスの作成時に渡されるクラス名には、完全な名前空間が含まれている必要があります。そうしないと、クラス名が見つからない場合に例外がスローされます。

以上がリフレクションを実装するためにphpが提供するものは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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