未知php代码分析,如何利用反射分析函数的形参信息?
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
苏南大叔又准备写未知php
代码分析的文章了,有点小兴奋。本文是利用反射对php
代码进行分析的。本文是有龙套函数的explode()
这个函数,将利用reflect
反射来分析一下它的形参信息。
苏南大叔的“程序如此灵动”技术博客,记录苏南大叔的代码编程经验文章。本文测试环境:win10
,nginx@1.15.11
,php@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
可见,两者存在着一个差异名称:delimiter
和separator
。
使用反射分析函数
这里使用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:"," )
相关文章
- https://newsn.net/say/php-trace-plus.html
- https://newsn.net/say/php-debug-var.html
- https://newsn.net/say/php-debug-func.html
结束语
关于Reflect
反射的相关函数,还有很多很多。本文就是仅仅对于其中最简单的函数参数分析的代码,做个简单的实验探讨。更多php
相关文章,可以参考:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。