Maison  >  Article  >  développement back-end  >  Que fournit PHP pour implémenter la réflexion

Que fournit PHP pour implémenter la réflexion

(*-*)浩
(*-*)浩original
2019-09-17 13:06:051848parcourir

Même si les membres de la classe sont définis comme privés, ils sont accessibles en externe. Vous pouvez accéder aux membres et aux méthodes de la classe sans créer d'instance de la classe.

Que fournit PHP pour implémenter la réflexion

PHP a ajouté un mécanisme de réflexion depuis la version 5.0, qui fournit un ensemble d'API de réflexion puissantes qui vous permettent d'accéder à l'environnement d'exécution PHP. utiliser des classes, des méthodes, des propriétés, des paramètres et des commentaires, etc. Ses fonctions sont très puissantes Il est souvent utilisé dans des frameworks PHP hautement extensibles, charge automatiquement des plug-ins, génère automatiquement des documents et peut même être utilisé. pour étendre le langage PHP. (Apprentissage recommandé : Programmation PHP du débutant à compétent)

Parce qu'il s'agit d'une extension oop intégrée de PHP, c'est une fonctionnalité du langage lui-même, il y a donc pas besoin d'ajouter des extensions supplémentaires ou de le configurer pour l'utiliser.

L'API de réflexion PHP maintiendra les classes de réflexion correspondantes basées sur les classes, les méthodes, les attributs, les paramètres, etc., et a fourni les API d'appel correspondantes.

Que fournit PHP pour implémenter la réflexion

Accès

En supposant qu'un utilisateur de classe soit défini, nous devons d'abord créer une instance de classe de réflexion de cette classe, puis basé sur cette instance Peut accéder aux propriétés ou aux méthodes de l'utilisateur. Que la déclaration d'autorisation du membre définie dans la classe soit publique ou non, elle peut être obtenue.

<?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方法的注释文档

Remarque : Le nom de classe transmis lors de la création d'une classe réflexive doit inclure l'espace de noms complet, même si le mot-clé use est utilisé. Sinon, une exception sera levée si le nom de la classe est introuvable.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn