ReflectionClass 反射类

最后更新于:2022-04-02 02:31:10

[TOC] ## 语法 ``` ReflectionClass::export — 导出一个类 ReflectionClass::getConstant — 获取定义过的一个常量 ReflectionClass::getConstants — 获取一组常量 ReflectionClass::getConstructor — 获取类的构造函数 ReflectionClass::getDefaultProperties — 获取默认属性 ReflectionClass::getDocComment — 获取文档注释 ReflectionClass::getExtension — 根据已定义的类获取所在扩展的 ReflectionExtension 对象 ReflectionClass::getExtensionName — 获取定义的类所在的扩展的名称 ReflectionClass::getFileName — 获取定义类的文件名 ReflectionClass::getInterfaceNames — 如果是继承接口,则获取接口(interface)名称 ReflectionClass::getInterfaces — 获取接口 ReflectionClass::implementsInterface($interface) bool — 是否实现$interface的实现 ReflectionClass::getMethod — 获取一个类方法的 ReflectionMethod。 ReflectionClass::getMethods — 获取方法的数组 ReflectionClass::getModifiers — 获取类的修饰符 ReflectionClass::getName — 获取类名 ReflectionClass::getParentClass — 获取父类 ReflectionClass::getNamespaceName — 获取命名空间的名称 ReflectionClass::getShortName — 获取短名,如"\foo\bar\A"输出 A ReflectionClass::getProperties — 获取一组属性 ReflectionClass::getProperty — 获取类的一个属性的 ReflectionProperty ReflectionClass::getStaticProperties — 获取静态(static)属性 ReflectionClass::getStaticPropertyValue — 获取静态(static)属性的值 ReflectionClass::getReflectionConstant — Gets a ReflectionClassConstant for a class's constant ReflectionClass::getReflectionConstants — Gets class constants ReflectionClass::getStartLine — 获取起始行号 ReflectionClass::getEndLine — 获取最后一行的行数 ReflectionClass::getTraitAliases — 返回 trait 别名的一个数组 ReflectionClass::getTraitNames — 返回这个类所使用 traits 的名称的数组 ReflectionClass::getTraits — 返回这个类所使用的 traits 数组 ReflectionClass::hasConstant — 检查常量是否已经定义 ReflectionClass::hasMethod — 检查方法是否已定义 ReflectionClass::hasProperty — 检查属性是否已定义 ReflectionClass::inNamespace — 检查是否位于命名空间中 ReflectionClass::isAbstract — 检查类是否是抽象类(abstract) ReflectionClass::isAnonymous — 检查类是否是匿名类 ReflectionClass::isCloneable — 返回了一个类是否可复制 ReflectionClass::isFinal — 检查类是否声明为 final ReflectionClass::isInstance — 检查类的实例 ReflectionClass::isInstantiable — 检查类是否可实例化 ReflectionClass::isInterface — 检查类是否是一个接口(interface) ReflectionClass::isInternal — 检查类是否由扩展或核心在内部定义 ReflectionClass::isIterable — Check whether this class is iterable ReflectionClass::isIterateable — 检查是否可迭代(iterateable) ReflectionClass::isSubclassOf — 检查是否为一个子类 ReflectionClass::isTrait — 返回了是否为一个 trait ReflectionClass::isUserDefined — 检查是否由用户定义的 ReflectionClass::newInstance — 传入参数,并生成新的类实例 ReflectionClass::newInstanceArgs — 从给出的参数创建一个新的类实例。 ReflectionClass::newInstanceWithoutConstructor — 创建一个新的类实例而不调用它的构造函数 ReflectionClass::setStaticPropertyValue — 设置静态属性的值 ``` ## 示例 ### 创建示例 ``` //image.php use \App\Lib\Upload; class Image{ private $p; public function __construct($param){ $this->p=$param; } public function demo(){ echo $this->p; } } // ========================= //在别处调用 初始化 image 类,并传入参数 $param=[]; $Instance = (new \ReflectionClass("\App\Lib\Upload\Image"))->newInstance("hello"); $Instance->demo(); //hello ``` ### 生成工厂类 ``` class ClassArr { public function initClass($type, $supportedClass,$params=[],$needInstance=true){ if (!array_key_exists($type, $supportedClass)){ return false; } $className = $supportedClass[$type]; return $needInstance?(new \ReflectionClass($className))->newInstanceArgs($params):$className; } static public function uploadClassStat(){ return[ 'image'=>'\App\Lib\Upload\Image', 'video'=>'\App\Lib\Upload\Video', ]; } } ``` run ``` $classArr = new ClassArr(); $uploadObj = $classArr->initClass("image", ClassArr::uploadClassStat(),[$request]); $uploadObj->upload();//执行类中的方法 ```
';