PHP中的reflection反射機制測試?yán)?/h1>
更新時間:2014年08月05日 11:57:27 投稿:junjie
這篇文章主要介紹了PHP中的reflection反射機制測試?yán)?從本文可以學(xué)到一些反射的使用方法,需要的朋友可以參考下
Java類反射應(yīng)用得非常廣泛幾乎是所有框架的最核心部分,PHP程序員似乎從不關(guān)心反射。嘗試著用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;
/**
* 登陸次數(shù)
*/
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:
<?php
require_once 'ReflectTest.php';
$ref = new ReflectTest("1", "admin", "admin888");//實例化ReflectTest
echo "<h1>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>Field:</h1><br/>";
$field = $class->getProperties();
foreach($field as $f) {
echo $f->getName()."<br/>";//反射輸出所有的成員變量
}
echo "<h1>get Fields DocComment:</h1><br/>";
foreach($field as $f) {
$docComment = $f->getDocComment();//反射輸出所有成員變量的文檔注釋
echo $docComment."<br/>";
}
$method = $class->getMethods();//獲取ReflectTest所有方法
echo "<h1>get Methods DocComment:</h1><br/>";
foreach($method as $m) {
$docComment = $m->getDocComment();//獲取所有方法的文檔注釋
echo $docComment."<br/>";
}
echo "<h1>get Methods:</h1><br/>";
foreach($method as $m) {
$k = "get";//只調(diào)ReflectTest中的所有的get方法
echo $m->getName()."=".($k === "" || strpos ( $m->getName (), $k ) === 0?$m->invoke($instance):"")."<br/>";
if("setQq"==$m->getName()){
$m->invoke($instance,'441637262');//調(diào)用setQq方法為ReflectTest當(dāng)中的成員變量qq設(shè)值
}
}
echo "<h1>Invoke (set/get)Qq result:</h1><br/>";
$qq=$class->getmethod('getQq');//獲取getQq方法
echo "getQQ:".$qq->invoke($instance)."<br/>";//獲取成員變量qq的值
echo "jb51.net";
?>
請求http://localhost/php/test/Test.php輸出結(jié)果:
ReflectTest init.
UserId:1
UserName:admin
Password:admin888
Field:
userId
userName
password
email
qq
loginTimes
get Fields DocComment:
/** * 用戶ID */
/** * 用戶名 */
/** * 用戶密碼 */
/** * 用戶郵箱 */
/** * 用戶QQ號碼 */
/** * 登陸次數(shù) */
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
相關(guān)文章
-
使用ob系列函數(shù)實現(xiàn)PHP網(wǎng)站頁面靜態(tài)化
php頁面緩存主要用到的是ob系列函數(shù),如ob_start(),ob_end_flush(),ob_get_contents() ,今天我們來談?wù)勈褂眠@些函數(shù)來實現(xiàn)php網(wǎng)站頁面靜態(tài)化 2014-08-08
-
PHP網(wǎng)頁游戲?qū)W習(xí)之Xnova(ogame)源碼解讀(十四)
這篇文章主要介紹了PHP網(wǎng)頁游戲Xnova(ogame)源碼解讀的資源更新頁面部分,需要的朋友可以參考下 2014-06-06
最新評論
Java類反射應(yīng)用得非常廣泛幾乎是所有框架的最核心部分,PHP程序員似乎從不關(guān)心反射。嘗試著用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; /** * 登陸次數(shù) */ 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:
<?php require_once 'ReflectTest.php'; $ref = new ReflectTest("1", "admin", "admin888");//實例化ReflectTest echo "<h1>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>Field:</h1><br/>"; $field = $class->getProperties(); foreach($field as $f) { echo $f->getName()."<br/>";//反射輸出所有的成員變量 } echo "<h1>get Fields DocComment:</h1><br/>"; foreach($field as $f) { $docComment = $f->getDocComment();//反射輸出所有成員變量的文檔注釋 echo $docComment."<br/>"; } $method = $class->getMethods();//獲取ReflectTest所有方法 echo "<h1>get Methods DocComment:</h1><br/>"; foreach($method as $m) { $docComment = $m->getDocComment();//獲取所有方法的文檔注釋 echo $docComment."<br/>"; } echo "<h1>get Methods:</h1><br/>"; foreach($method as $m) { $k = "get";//只調(diào)ReflectTest中的所有的get方法 echo $m->getName()."=".($k === "" || strpos ( $m->getName (), $k ) === 0?$m->invoke($instance):"")."<br/>"; if("setQq"==$m->getName()){ $m->invoke($instance,'441637262');//調(diào)用setQq方法為ReflectTest當(dāng)中的成員變量qq設(shè)值 } } echo "<h1>Invoke (set/get)Qq result:</h1><br/>"; $qq=$class->getmethod('getQq');//獲取getQq方法 echo "getQQ:".$qq->invoke($instance)."<br/>";//獲取成員變量qq的值 echo "jb51.net"; ?>
請求http://localhost/php/test/Test.php輸出結(jié)果:
ReflectTest init. UserId:1 UserName:admin Password:admin888 Field: userId userName password email qq loginTimes get Fields DocComment: /** * 用戶ID */ /** * 用戶名 */ /** * 用戶密碼 */ /** * 用戶郵箱 */ /** * 用戶QQ號碼 */ /** * 登陸次數(shù) */ 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
相關(guān)文章
使用ob系列函數(shù)實現(xiàn)PHP網(wǎng)站頁面靜態(tài)化
php頁面緩存主要用到的是ob系列函數(shù),如ob_start(),ob_end_flush(),ob_get_contents() ,今天我們來談?wù)勈褂眠@些函數(shù)來實現(xiàn)php網(wǎng)站頁面靜態(tài)化2014-08-08PHP網(wǎng)頁游戲?qū)W習(xí)之Xnova(ogame)源碼解讀(十四)
這篇文章主要介紹了PHP網(wǎng)頁游戲Xnova(ogame)源碼解讀的資源更新頁面部分,需要的朋友可以參考下2014-06-06