PHP的反射动态获取类方法、属性、参数操作示例
程序员文章站
2022-09-06 21:41:31
本文实例讲述了php的反射动态获取类方法、属性、参数操作。分享给大家供大家参考,具体如下:我们可以在php运行时,通过php的反射动态的获取类的方法、属性、参数等详细信息。用途:插件的设计,文档的自动...
本文实例讲述了php的反射动态获取类方法、属性、参数操作。分享给大家供大家参考,具体如下:
我们可以在php运行时,通过php的反射动态的获取类的方法、属性、参数等详细信息。
用途:插件的设计,文档的自动生成,扩充php语言。
<?php class person { const weightunit = 'kg'; const heightunit = 'cm'; public $name = 'test'; public $age = 1; public function say($msg = '') { echo $msg; } } $p = new person (); // 普通的实例化对象,调用方法 $p->say ( 'hello' ); echo "<br/>"; // 创建一个person的反射类 $rp = new reflectionclass ( 'person' ); // 通过reflectionclass的方法来获取类的详细信息 // 获取常量 echo $rp->getconstant ( 'weightunit' ); echo "<br/>"; // 获取类中已定义的常量 var_dump ( $rp->getconstants () ); // 获取属性,返回的是一个reflectionproperty类 $propname = $rp->getproperty ( 'name' ); echo $propname->getname(), ':', $propname->getvalue ( new person () ); echo "<br/>"; // 获取类中已定义的一组属性 $proparr = $rp->getproperties (); foreach ( $proparr as $obj ) { echo $obj->getname (), ':', $obj->getvalue ( new person () ); } echo "<br/>"; //获取方法,返回的是一个reflectionmethod类 $saymetd = $rp->getmethod('say'); if($saymetd->ispublic() && !$saymetd->isabstract()) { $saymetd->invoke(new person(), 'hehe'); $saymetd->invokeargs(new person(), array('hehe')); } //获取类中已定义的一组方法,可以过滤不需要的方法 $metds = $rp->getmethods(); //获取命名空间 echo $rp->getnamespacename(); echo "<br/>"; //判断一个方法是否定义 if($rp->hasmethod('say')) { echo 'say has'; } echo "<br/>"; //判断一个属性是否定义 if($rp->hasproperty('name')) { echo 'name has'; }
运行结果:
hello
kg
array(2) { ["weightunit"]=> string(2) "kg" ["heightunit"]=> string(2) "cm" } name:test
name:testage:1
hehehehe
say has
name has
上一篇: SQL server不支持utf8 php却用utf8的矛盾问题解决方法
下一篇: 二刀肉是后腿肉吗