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

苏南大叔又准备写未知php代码分析的文章了,有点小兴奋。本文是利用反射对php代码进行分析的。本文是有龙套函数的explode()这个函数,将利用reflect反射来分析一下它的形参信息。

苏南大叔:未知php代码分析,如何利用反射分析函数的形参信息? - php反射
未知php代码分析,如何利用反射分析函数的形参信息?(图2-1)

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

需求分析

在分析php8的新特性的时候,有个新特性是可以无视函数参数的定义,混顺序传递参数。那么,前提是获得参数的名称。苏南大叔想,编辑器里面代码的提示信息里面,不就存在着参数的名称定义么?

这里选择explode()这个替代split()函数的存在,提示信息是这样写的。如下图所示:

explode( string $delimiter , string $string [, int $limit = PHP_INT_MAX ]): array

然而,按照php8的新规则执行下面的代码时,却报错了。

explode( string:"email,phone" , delimiter:"," );

输出是:

Fatal error: Uncaught Error: Unknown named parameter $delimiter

查看官方文档

php官方文档是这么写的:

explode(string $separator, string $string, int $limit = PHP_INT_MAX): array

可见,两者存在着一个差异名称:delimiterseparator

苏南大叔:未知php代码分析,如何利用反射分析函数的形参信息? - 反射输出参数信息
未知php代码分析,如何利用反射分析函数的形参信息?(图2-2)

使用反射分析函数

这里使用ReflectionFunction来对explode()进行代码分析:

$f = new ReflectionFunction("explode");
foreach($f->getParameters() as $p){
    var_dump($p->name);
}

输出是:

string(9) "separator"
string(6) "string"
string(5) "limit"

所以,可以无视参数顺序定义的explode()写法是:

explode( string:"email,phone" , separator:"," )

相关文章

结束语

关于Reflect反射的相关函数,还有很多很多。本文就是仅仅对于其中最简单的函数参数分析的代码,做个简单的实验探讨。更多php相关文章,可以参考:

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

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

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

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