Heim  >  Artikel  >  Backend-Entwicklung  >  Was bietet PHP, um Reflektion zu implementieren?

Was bietet PHP, um Reflektion zu implementieren?

(*-*)浩
(*-*)浩Original
2019-09-17 13:06:051783Durchsuche

Auch wenn ein Klassenmitglied als privat definiert ist, kann von außen auf die Mitglieder und Methoden der Klasse zugegriffen werden, ohne eine Instanz der Klasse zu erstellen.

Was bietet PHP, um Reflektion zu implementieren?

PHP hat seit Version 5.0 einen Reflexionsmechanismus hinzugefügt, der eine Reihe leistungsstarker Reflexions-APIs bereitstellt, mit denen Sie auf die PHP-Laufumgebung zugreifen können Verwenden Sie Klassen, Methoden, Eigenschaften, Parameter und Kommentare usw. Seine Funktionen sind sehr leistungsfähig Es wird häufig in hoch erweiterbaren PHP-Frameworks verwendet, lädt automatisch Plug-Ins, generiert automatisch Dokumente und kann sogar verwendet werden um die PHP-Sprache zu erweitern. (Empfohlenes Lernen: PHP-Programmierung vom Anfänger bis zum Experten)

Da es sich um eine integrierte OOP-Erweiterung von PHP handelt, handelt es sich um eine Funktion der Sprache selbst, also gibt es sie Es ist nicht erforderlich, zusätzliche Erweiterungen hinzuzufügen oder für die Verwendung zu konfigurieren.

Die PHP-Reflexions-API verwaltet entsprechende Reflexionsklassen basierend auf Klassen, Methoden, Attributen, Parametern usw. und stellt entsprechende Aufruf-APIs bereit.

Was bietet PHP, um Reflektion zu implementieren?

Zugriff

Angenommen, eine Klasse „Benutzer“ ist definiert, müssen wir zunächst eine Reflexionsklasseninstanz dieser Klasse erstellen und dann Basierend auf dieser Instanz kann auf Eigenschaften oder Methoden im Benutzer zugegriffen werden. Unabhängig davon, ob die in der Klasse definierte Mitgliedsberechtigungserklärung öffentlich ist, kann sie abgerufen werden.

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

Hinweis: Der beim Erstellen einer reflektierenden Klasse übergebene Klassenname muss den vollständigen Namespace enthalten, auch wenn das Schlüsselwort use verwendet wird. Andernfalls wird eine Ausnahme ausgelöst, wenn der Klassenname nicht gefunden werden kann.

Das obige ist der detaillierte Inhalt vonWas bietet PHP, um Reflektion zu implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn