PHP自5.0版本今后增加了反射机制,它供应了一套壮大的反射API,许可你在PHP运转环境中,接见和运用类、要领、属性、参数和解释等,其功用非常壮大,常常用于高扩大的PHP框架,自动加载插件,自动生成文档,以至能够用来扩大PHP言语。(引荐进修:PHP编程从入门到通晓)
因为它是PHP內建的oop扩大,为言语自身自带的特征,所以不须要分外增加扩大或许设置就能够运用。
PHP反射API会基于类,要领,属性,参数等保护响应的反射类,已供应响应的挪用API。
接见
假定定义了一个类 User,我们起首须要竖立这个类的反射类实例,然后基于这个实例能够接见 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供应了什么来完成反射的细致内容,更多请关注ki4网别的相干文章!