加入收藏 | 设为首页 | 会员中心 | 我要投稿 焦作站长网 (https://www.0391zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP反射基础知识回顾

发布时间:2020-09-15 19:06:23 所属栏目:PHP教程 来源:互联网
导读:这篇文章主要介绍了PHP 反射的相关资料,帮助大家回顾和理解PHP的相关知识,感兴趣的朋友可以了解下

功能 函数式API 反射API
函数是否存在   function_exists   ReflectionFunction  
类是否存在   class_exits   ReflectionClass  
方法是否存在   method_exits   ReflectionMethod  
变量/属性是否存在   property_exits   ReflectionProperty  
获取类变量   get_class_vars   ReflectionClass::getProperties  
获取类方法   get_class_methods   ReflectionClass::getMethods  
获取类常量     ReflectionClass::RegetReflectionConstant(s)  
获取函数/方法参数信息     ReflectionFunction/Method::getParameters  
获取函数/方法返回值     ReflectionFunction/Method::getReturnType  
类使用的特性   class_uses   ReflectionClass::getTraits  
获取父类   class_parents   ReflectionClass::getParentClass  
获取类实现的接口   class_implements   ReflectionClass::getInterfaceNames  
获取类所在名字空间   __NAMESPACE__   ReflectionClass::getNamespaceName  
函数调用   call_user_func(_array)   ReflectionMethod(Function)::invoke(Args)  
获取类名   __CLASS__/::class   ReflectionClass::getName  
获取函数名   __METHOD__/__FUNCTION__   ReflectionFunction/Method::getName  
获取类/常量/变量/方法修饰符     ReflectionClass/Constant/Property/Method::getModifiers  
获取所在文件   __FILE__   ReflectionClass/Constant/Function/Method::getFileName  
获取所在行(范围)     ReflectionClass/Function/Method::getStartLine/getEndLine  
获取文档     ReflectionClass/Function/Method::getDocComment  
  extension_loaded   ReflectionZendExtension  
拓展   get_loaded_extensions   ReflectionExtension  
  get_extension_funcs  

从上表可以看出反射API较函数式API能提供更全面的信息。还需要注意到__FILE__这类魔术常量是编译期的工作,不是运行时的能力。

同时给出RTTI的函数式API和反射API在功能上的差异:

功能 函数式API 反射API
类型判断   is_int/is_bool/is_array等    
获取对象的类名   get_class   ReflectionObject::getName  
获取对象父类   get_parent_class   ReflectionObject::getParentClass  
类型/继承检测   instanceof/is_a/is_subclass_of   ReflectionObject::isInstance/isSubclassOf  
生成器     ReflectionGenerator  

总结

本文对PHP中的反射机制做了简要总结,并与在运行时获取代码信息的函数式API做了对比。即使你token_get_all用得再熟练,preg_match等文本操作用得再顺手,反射API仍有其独到一面,值得了解。如本人之前博文“PHP中的重载”所言,有了反射,function_exits/class_exits、call_user_func这些函数应该可以退休。但是考虑到兼容、使用便利、运行效率等因素,许多框架仍然依赖这些API。

(编辑:焦作站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读