PHP中的reflection反射机制测试例子
Java类反射应用得非常广泛几乎是所有框架的最核心部分,PHP程序员似乎从不关心反射。尝试着用java的思想去理解php的反射,跟java基本上基本一致。参考了php手册:http://www.php.net/manual/zh/book.reflection.php。 ReflectTest.php: class ReflectTest {
/**
/**
/**
/**
/**
/**
public function ReflectTest(){ } public function __construct($userId,$userName,$password){ /**
/**
/**
/**
/**
/**
/**
/**
/**
/**
/**
/**
Test.php: ReflectTest init.
UserId:".$ref->getUserId()." UserName:".$ref->getUserName()." Password:".$ref->getPassword(); $class = new ReflectionClass('ReflectTest');//反射加载ReflectTest类 $instance = $class->newInstanceArgs(array('123','root','123456'));//ReflectTest初始化 echo " Field:"; $field = $class->getProperties(); foreach($field as $f) { echo $f->getName()." ";//反射输出所有的成员变量 } echo " get Fields DocComment:"; foreach($field as $f) { $docComment = $f->getDocComment();//反射输出所有成员变量的文档注释 echo $docComment." "; } $method = $class->getMethods();//获取ReflectTest所有方法 get Methods DocComment:"; foreach($method as $m) { $docComment = $m->getDocComment();//获取所有方法的文档注释 echo $docComment." "; } echo " get Methods:"; foreach($method as $m) { $k = "get";//只调ReflectTest中的所有的get方法 echo $m->getName()."=".($k === "" || strpos ( $m->getName (),$k ) === 0?$m->invoke($instance):"")." "; if("setQq"==$m->getName()){ $m->invoke($instance,'441637262');//调用setQq方法为ReflectTest当中的成员变量qq设值 } } echo " Invoke (set/get)Qq result:"; $qq=$class->getmethod('getQq');//获取getQq方法 echo "getQQ:".$qq->invoke($instance)." ";//获取成员变量qq的值 echo "52php.cn"; ?> 请求http://localhost/php/test/Test.php输出结果: UserId:1 userId / 用户ID / / @return the $userId */ ReflectTest= getQQ:441637262 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |