如何正确的使用PHP反射

介绍

如何正确的使用PHP反射?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

最近在开发过程中需要获取某个类方法的参数数量,名称及参数顺序,好根据参数的名称来从$ _GET里取值。

如方法原型为测试(uid,分数美元),那么我就知道需要需要从$ _GET取

代码如下:


$ uid=$ _GET [& # 39; uid # 39;];

$得分=$ _GET[& # 39;分数# 39;];

然后调用方法美元obj→测试(uid,分数美元)

当然前提是约定好了参数名称和得到方法传值变量名一致。

采用PHP的反射API,获得函数参数名称和参数默认值的方法如下:

代码如下:


& lt; ? php 类testClass {
,
,,,,,
,,,公共函数testFunc (param1, param2=0美元){,
,,,,,,,,,
,,,},
},
,
$方法=新ReflectionMethod (& # 39; testClass& # 39; & # 39; testFunc& # 39;),,
params=方法——→美元getparameter (),,
foreach (params param美元美元){,
,,,回声& # 39;参数名称:& # 39;。参数→美元getName (),“\ n",,
,,,如果(参数→美元isOptional ()) {,
,,,,,,,回声& # 39;默认值:& # 39;。参数→美元getDefaultValue (),“\ n",,
,,,},
},

<强>下面是PHP反射API的介绍:

1,用途:
该扩展分析PHP程序,导出或提取出关于类,方法,属性,参数等的详细信息,包括注释。
反射可以说是对PHP库函数:“类/对象类/对象函数”的一个扩展。
主要用在通过程序检测现有PHP程序内部关于类,方法等信息,并做出处理。

2, API概览:

代码如下:


类反射{},
界面反射镜{},
类ReflectionException扩展异常{},
类ReflectionFunction实现反射镜{},
类ReflectionParameter实现反射镜{},
类ReflectionMethod延伸ReflectionFunction {},
类ReflectionClass实现反射镜{},
类ReflectionObject延伸ReflectionClass {},
类ReflectionProperty实现反射镜{},
类ReflectionExtension实现反射镜{},

3,详细说明:(例子详见php手册)

代码如下:


①反射类,
& lt; ? php 
类Reflection 
{,
公共静态混合出口(反射器r [, bool返回]),
//导出一个类或方法的详细信息,
公共静态数组getModifierNames (int修饰符),
//取得修饰符的名字,
},
?祝辞,
,
②ReflectionException类,
,
该类继承标准类,没特殊方法和属性只
,
③ReflectionFunction类,
& lt; ? php 
类ReflectionFunction实现Reflector 
{,
最后私人__clone (),__construct
公共对象(字符串名称),__toString
公共字符串(),
公共静态字符串export (),
//导出该函数的详细信息,
公共字符串getName (),
//取得函数名,
公共bool isInternal (),
//测试是否为系统内部函数,
公共bool isUserDefined (),
//测试是否为用户自定义函数,
公共字符串getFileName (),
//取得文件名,包括路径名,
公共int getStartLine (),
//取得定义函数的起始行,
公共int getEndLine (),
//取得定义函数的结束行,
公共字符串getDocComment (),
//取得函数的注释,
公共数组getStaticVariables (),
//取得静态变量,
公共混合调用(混合* args),
//调用该函数,通过参数列表传参数,
公共混合invokeArgs(数组参数),
//调用该函数,通过数组传参数,
公共bool returnsReference (),
//测试该函数是否返回引用,
公共ReflectionParameter [] getparameter (),
//取得该方法所需的参数,返回值为对象数组,
公共int getNumberOfParameters (),
//取得该方法所需的参数个数,
公共int getNumberOfRequiredParameters (),
//取得该方法所需的参数个数,
},
?祝辞,
,
④ReflectionParameter类:
& lt; ? php 
类ReflectionParameter实现Reflector 
{,
最后私人__clone (),__construct
公共对象(字符串名称),__toString
公共字符串(),
公共静态字符串export (),
//导出该参数的详细信息,
公共字符串getName (),
//取得参数名,
公共bool isPassedByReference (),
//测试该参数是否通过引用传递参数,
公共ReflectionClass getClass (),
//若该参数为对象,返回该对象的类名,
公共bool isArray (),
//测试该参数是否为数组类型,
公共bool allowsNull (),
//测试该参数是否允许为空,
公共bool isOptional (),
//测试该参数是否为可选的,当有默认参数时可选,
公共bool isDefaultValueAvailable (),
//测试该参数是否为默认参数,
公共混合getDefaultValue (),

如何正确的使用PHP反射