PHP中的reflection反射机制测试例子_php实例
Jun 07, 2016 pm 05:16 PM
php
reflection
反射机制
Java类反射应用得非常广泛几乎是所有框架的最核心部分,PHP程序员似乎从不关心反射。尝试着用java的思想去理解php的反射,跟java基本上基本一致。参考了php手册:http://www.php.net/manual/zh/book.reflection.php。
ReflectTest.php:
<?php class ReflectTest { /** * 用户ID */ private $userId; /** * 用户名 */ private $userName; /** * 用户密码 */ private $password; /** * 用户邮箱 */ private $email; /** * 用户QQ号码 */ private $qq; /** * 登陆次数 */ private $loginTimes; public function ReflectTest(){ } public function __construct($userId,$userName,$password){ $this->userId = $userId; $this->userName = $userName; $this->password = $password; } /** * * @return the $userId */ public function getUserId() { return $this->userId; } /** * * @return the $userName */ public function getUserName() { return $this->userName; } /** * * @return the $password */ public function getPassword() { return $this->password; } /** * * @return the $email */ public function getEmail() { return $this->email; } /** * * @return the $qq */ public function getQq() { return $this->qq; } /** * * @return the $loginTimes */ public function getLoginTimes() { return $this->loginTimes; } /** * * @param field_type $userId */ public function setUserId($userId) { $this->userId = $userId; } /** * * @param field_type $userName */ public function setUserName($userName) { $this->userName = $userName; } /** * * @param field_type $password */ public function setPassword($password) { $this->password = $password; } /** * * @param field_type $email */ public function setEmail($email) { $this->email = $email; } /** * * @param field_type $qq */ public function setQq($qq) { $this->qq = $qq; } /** * * @param field_type $loginTimes */ public function setLoginTimes($loginTimes) { $this->loginTimes = $loginTimes; } } ?>
Copier après la connexion
Test.php:
<?php require_once 'ReflectTest.php'; $ref = new ReflectTest("1", "admin", "admin888");//实例化ReflectTest echo "<h1 id="ReflectTest-init">ReflectTest init.</h1><br/>UserId:".$ref->getUserId()."<br/>UserName:".$ref->getUserName()."<br/>Password:".$ref->getPassword(); $class = new ReflectionClass('ReflectTest');//反射加载ReflectTest类 $instance = $class->newInstanceArgs(array('123','root','123456'));//ReflectTest初始化 echo "<h1 id="Field">Field:</h1><br/>"; $field = $class->getProperties(); foreach($field as $f) { echo $f->getName()."<br/>";//反射输出所有的成员变量 } echo "<h1 id="get-Fields-DocComment">get Fields DocComment:</h1><br/>"; foreach($field as $f) { $docComment = $f->getDocComment();//反射输出所有成员变量的文档注释 echo $docComment."<br/>"; } $method = $class->getMethods();//获取ReflectTest所有方法 echo "<h1 id="get-Methods-DocComment">get Methods DocComment:</h1><br/>"; foreach($method as $m) { $docComment = $m->getDocComment();//获取所有方法的文档注释 echo $docComment."<br/>"; } echo "<h1 id="get-Methods">get Methods:</h1><br/>"; foreach($method as $m) { $k = "get";//只调ReflectTest中的所有的get方法 echo $m->getName()."=".($k === "" || strpos ( $m->getName (), $k ) === 0?$m->invoke($instance):"")."<br/>"; if("setQq"==$m->getName()){ $m->invoke($instance,'441637262');//调用setQq方法为ReflectTest当中的成员变量qq设值 } } echo "<h1 id="Invoke-set-get-Qq-result">Invoke (set/get)Qq result:</h1><br/>"; $qq=$class->getmethod('getQq');//获取getQq方法 echo "getQQ:".$qq->invoke($instance)."<br/>";//获取成员变量qq的值 echo "php.net"; ?>
Copier après la connexion
请求http://localhost/php/test/Test.php输出结果:
ReflectTest init. UserId:1 UserName:admin Password:admin888 Field: userId userName password email qq loginTimes get Fields DocComment: /** * 用户ID */ /** * 用户名 */ /** * 用户密码 */ /** * 用户邮箱 */ /** * 用户QQ号码 */ /** * 登陆次数 */ get Methods DocComment: /** * * @return the $userId */ /** * * @return the $userName */ /** * * @return the $password */ /** * * @return the $email */ /** * * @return the $qq */ /** * * @return the $loginTimes */ /** * * @param field_type $userId */ /** * * @param field_type $userName */ /** * * @param field_type $password */ /** * * @param field_type $email */ /** * * @param field_type $qq */ /** * * @param field_type $loginTimes */ get Methods: ReflectTest= __construct= getUserId=123 getUserName=root getPassword=123456 getEmail= getQq= getLoginTimes= setUserId= setUserName= setPassword= setEmail= setQq= setLoginTimes= Invoke (set/get)Qq result: getQQ:441637262 php.net
Copier après la connexion
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Article chaud
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines
By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines
By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds Tags

Article chaud
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines
By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines
By 尊渡假赌尊渡假赌尊渡假赌

Tags d'article chaud

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian

Comment configurer Visual Studio Code (VS Code) pour le développement PHP
