我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

最近的php相关文章,大多数都涉及到了php的反射功能。苏南大叔是这么看待反射功能的:可以黑盒分析一些已有的函数或者类(及其它)。当然,你也可以通过查看文档来获得相关的知识。但是,如果目标函数没有使用文档呢?或者存在于第三方的加密扩展里面呢?是不是就抓瞎了?这种情况下,反射功能也许就是一个可用的稻草。

苏南大叔:php中,反射相关的类都有哪些?可用的反射工具类大全 - php反射相关的类
php中,反射相关的类都有哪些?可用的反射工具类大全(图2-1)

苏南大叔的"程序如此灵动"技术博客,记录苏南大叔的代码编程感想感悟。本文测试环境:win10nginx@1.15.11php@8.2.10-nts

可用的反射相关类

根据苏南大叔的代码测算,这些反射相关类有下面这些:

类名官方文档
ReflectionExceptionhttps://www.php.net/manual/zh/class.reflectionexception
Reflectionhttps://www.php.net/manual/zh/class.reflection
ReflectionFunctionAbstracthttps://www.php.net/manual/zh/class.reflectionfunctionabstract
ReflectionFunctionhttps://www.php.net/manual/zh/class.reflectionfunction
ReflectionGeneratorhttps://www.php.net/manual/zh/class.reflectiongenerator
ReflectionParameterhttps://www.php.net/manual/zh/class.reflectionparameter
ReflectionTypehttps://www.php.net/manual/zh/class.reflectiontype
ReflectionNamedTypehttps://www.php.net/manual/zh/class.reflectionnamedtype
ReflectionUnionTypehttps://www.php.net/manual/zh/class.reflectionuniontype
ReflectionIntersectionTypehttps://www.php.net/manual/zh/class.reflectionintersectiontype
ReflectionMethodhttps://www.php.net/manual/zh/class.reflectionmethod
ReflectionClasshttps://www.php.net/manual/zh/class.reflectionclass
ReflectionObjecthttps://www.php.net/manual/zh/class.reflectionobject
ReflectionPropertyhttps://www.php.net/manual/zh/class.reflectionproperty
ReflectionClassConstanthttps://www.php.net/manual/zh/class.reflectionclassconstant
ReflectionExtensionhttps://www.php.net/manual/zh/class.reflectionextension
ReflectionZendExtensionhttps://www.php.net/manual/zh/class.reflectionzendextension
ReflectionReferencehttps://www.php.net/manual/zh/class.reflectionreference
ReflectionAttributehttps://www.php.net/manual/zh/class.reflectionattribute
ReflectionEnumhttps://www.php.net/manual/zh/class.reflectionenum
ReflectionEnumUnitCasehttps://www.php.net/manual/zh/class.reflectionenumunitcase
ReflectionEnumBackedCasehttps://www.php.net/manual/zh/class.reflectionenumbackedcase
ReflectionFiberhttps://www.php.net/manual/zh/class.reflectionfiber

当然还有其它一些具有反射的类似功能,但是没有反射相关的名字的函数。比如:

函数名官方文档
get_class()https://www.php.net/manual/zh/function.get-class
get_class_methods()https://www.php.net/manual/zh/function.get-class-methods
get_class_vars()https://www.php.net/manual/zh/function.get-class-vars
get_object_vars()https://www.php.net/manual/zh/function.get-object-vars

在这里就不一一列举了。

如何获得反射相关列表

其实本文主要的目的是展示一下下面这段代码,通过代码显示获得目标类的思路。

$class_all = get_declared_classes();
$result = [];
foreach($class_all as $c){
    if( strpos(needle:"Reflection",haystack:$c)===0 ){
        $result[] = $c;
    }
}
print_r($result);

当然,使用了php8新特性写的上述代码【故意的做练习而已】,不能运行的话,请更换php版本或者改写代码。

苏南大叔:php中,反射相关的类都有哪些?可用的反射工具类大全 - 获得反射相关类的列表
php中,反射相关的类都有哪些?可用的反射工具类大全(图2-2)

输出如下:

Array
(
    [0] => ReflectionException
    [1] => Reflection
    [2] => ReflectionFunctionAbstract
    [3] => ReflectionFunction
    [4] => ReflectionGenerator
    [5] => ReflectionParameter
    [6] => ReflectionType
    [7] => ReflectionNamedType
    [8] => ReflectionUnionType
    [9] => ReflectionIntersectionType
    [10] => ReflectionMethod
    [11] => ReflectionClass
    [12] => ReflectionObject
    [13] => ReflectionProperty
    [14] => ReflectionClassConstant
    [15] => ReflectionExtension
    [16] => ReflectionZendExtension
    [17] => ReflectionReference
    [18] => ReflectionAttribute
    [19] => ReflectionEnum
    [20] => ReflectionEnumUnitCase
    [21] => ReflectionEnumBackedCase
    [22] => ReflectionFiber
)

相关文章

结束语

php作为世界上最好的语言,其实挺博大精深的。更多苏南大叔的php相关文章,请参考:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   php