最近在开发过程中需要获取某个类方法的参数数量、名称及参数顺序,好根据参数的名称来从$_get里取值。
如方法原型为test($uid,$score), 那么我就知道需要需要从$_GET取
$uid = $_GET['uid']; $score = $_GET['score'];
然后调用方法$obj->test($uid,$score)
当然前提是约定好了参数名称和get方法传值变量名一致。
采用PHP的反射API,获得函数参数名称和参数默认值的方法如下:
立即学习“PHP免费学习笔记(深入)”;
getParameters();
foreach ($params as $param) {
echo 'param name: ' . $param->getName(),"\n";
if ($param->isOptional()) {
echo 'Default value: ' . $param->getDefaultValue(),"\n";
}
}下面是PHP反射API的介绍:
1、用途:
该扩展分析php程序,导出或提取出关于类、方法、属性、参数等的详细信息,包括注释。
Reflection可以说是对php库函数:“Classes/Objects 类/对象函数”的一个扩展。
主要用在通过程序检测现有php程序内部关于类、方法等信息,并做出处理。
2、API概览:
class Reflection { }
interface Reflector { }
class ReflectionException extends Exception { }
class ReflectionFunction implements Reflector { }
class ReflectionParameter implements Reflector { }
class ReflectionMethod extends ReflectionFunction { }
class ReflectionClass implements Reflector { }
class ReflectionObject extends ReflectionClass { }
class ReflectionProperty implements Reflector { }
class ReflectionExtension implements Reflector { }3、详细说明:(例子详见php手册)
动态WEB网站中的PHP和MySQL详细反映实际程序的需求,仔细地探讨外部数据的验证(例如信用卡卡号的格式)、用户登录以及如何使用模板建立网页的标准外观。动态WEB网站中的PHP和MySQL的内容不仅仅是这些。书中还提到如何串联JavaScript与PHP让用户操作时更快、更方便。还有正确处理用户输入错误的方法,让网站看起来更专业。另外还引入大量来自PEAR外挂函数库的强大功能,对常用的、强大的包
①Reflection类
②ReflectionException类
该类继承标准类,没特殊方法和属性。
③ReflectionFunction类
④ReflectionParameter类:
⑤ReflectionClass类:
getModifiers())进一步读取 public bool isInstance(stdclass object) //测试传入的对象是否为该类的一个实例 public stdclass newInstance(mixed* args) //创建该类实例 public ReflectionClass getParentClass() //取得父类 public bool isSubclassOf(ReflectionClass class) //测试传入的类是否为该类的父类 public array getStaticProperties() //取得该类的所有静态属性 public mixed getStaticPropertyValue(string name [, mixed default]) //取得该类的静态属性值,若private,则不可访问 public void setStaticPropertyValue(string name, mixed value) //设置该类的静态属性值,若private,则不可访问,有悖封装原则 public array getDefaultProperties() //取得该类的属性信息,不含静态属性 public bool isIterateable() public bool implementsInterface(string name) //测试是否实现了某个特定接口 public ReflectionExtension getExtension() public string getExtensionName() } ?>
⑥ReflectionMethod类:
⑦ReflectionProperty类:
⑧ReflectionExtension类










