php 测试例子,PHP中的reflection反射机制测试例子

Java类反射应用得非常广泛几乎是所有框架的最核心部分,PHP程序员似乎从不关心反射。尝试着用java的思想去理解php的反射,跟java基本上基本一致。参考了php手册:http://www.php.net/manual/zh/book.reflection.php。

ReflectTest.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;

}

}

?>

Test.php:

require_once 'ReflectTest.php';

$ref = new ReflectTest("1", "admin", "admin888");//实例化ReflectTest

echo "

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所有方法

echo "

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 "jb51.net";

?>

请求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

jb51.net

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值