PHP中的reflection反射機(jī)制測(cè)試?yán)?/h1>
更新時(shí)間:2014年08月05日 11:57:27 投稿:junjie
這篇文章主要介紹了PHP中的reflection反射機(jī)制測(cè)試?yán)?從本文可以學(xué)到一些反射的使用方法,需要的朋友可以參考下
Java類反射應(yīng)用得非常廣泛幾乎是所有框架的最核心部分,PHP程序員似乎從不關(guān)心反射。嘗試著用java的思想去理解php的反射,跟java基本上基本一致。參考了php手冊(cè):http://www.php.net/manual/zh/book.reflection.php。
ReflectTest.php:
<?php
class ReflectTest {
/**
* 用戶ID
*/
private $userId;
/**
* 用戶名
*/
private $userName;
/**
* 用戶密碼
*/
private $password;
/**
* 用戶郵箱
*/
private $email;
/**
* 用戶QQ號(hào)碼
*/
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");//實(shí)例化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";
?>
請(qǐng)求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號(hào)碼 */
/** * 登陸次數(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
您可能感興趣的文章:- PHP的反射類ReflectionClass、ReflectionMethod使用實(shí)例
- PHP反射類ReflectionClass和ReflectionObject的使用方法
- PHP反射機(jī)制原理與用法詳解
- PHP反射使用實(shí)例和PHP反射API的中文說明
- 解析php中反射的應(yīng)用
- PHP反射機(jī)制用法實(shí)例
- 在PHP中使用反射技術(shù)的架構(gòu)插件使用說明
- php反射類ReflectionClass用法分析
- PHP 反射(Reflection)使用實(shí)例
- PHP基于反射機(jī)制實(shí)現(xiàn)自動(dòng)依賴注入的方法詳解
- PHP進(jìn)階學(xué)習(xí)之反射基本概念與用法分析
相關(guān)文章
-
使用ob系列函數(shù)實(shí)現(xiàn)PHP網(wǎng)站頁面靜態(tài)化
php頁面緩存主要用到的是ob系列函數(shù),如ob_start(),ob_end_flush(),ob_get_contents() ,今天我們來談?wù)勈褂眠@些函數(shù)來實(shí)現(xiàn)php網(wǎng)站頁面靜態(tài)化 2014-08-08
-
解析yahoo郵件用phpmailer發(fā)送的實(shí)例
本篇文章是對(duì)yahoo郵件用phpmailer發(fā)送的實(shí)例進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下 2013-06-06
-
PHP網(wǎng)頁游戲?qū)W習(xí)之Xnova(ogame)源碼解讀(十四)
這篇文章主要介紹了PHP網(wǎng)頁游戲Xnova(ogame)源碼解讀的資源更新頁面部分,需要的朋友可以參考下 2014-06-06
-
淺談php fopen下載遠(yuǎn)程文件的函數(shù)
下面小編就為大家?guī)硪黄獪\談php fopen下載遠(yuǎn)程文件的函數(shù)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧 2016-11-11
-
CodeIgniter擴(kuò)展核心類實(shí)例詳解
這篇文章主要介紹了CodeIgniter擴(kuò)展核心類,結(jié)合實(shí)例形式分析了CodeIgniter針對(duì)核心類的擴(kuò)展方法與擴(kuò)展CI類庫與輔助函數(shù)的實(shí)現(xiàn)技巧,需要的朋友可以參考下 2016-01-01
-
laravel 5.3 單用戶登錄簡(jiǎn)單實(shí)現(xiàn)方法
今天小編就為大家分享一篇laravel 5.3 單用戶登錄簡(jiǎn)單實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧 2019-10-10
最新評(píng)論
Java類反射應(yīng)用得非常廣泛幾乎是所有框架的最核心部分,PHP程序員似乎從不關(guān)心反射。嘗試著用java的思想去理解php的反射,跟java基本上基本一致。參考了php手冊(cè):http://www.php.net/manual/zh/book.reflection.php。
ReflectTest.php:
<?php class ReflectTest { /** * 用戶ID */ private $userId; /** * 用戶名 */ private $userName; /** * 用戶密碼 */ private $password; /** * 用戶郵箱 */ private $email; /** * 用戶QQ號(hào)碼 */ 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");//實(shí)例化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"; ?>
請(qǐng)求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號(hào)碼 */ /** * 登陸次數(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
- PHP的反射類ReflectionClass、ReflectionMethod使用實(shí)例
- PHP反射類ReflectionClass和ReflectionObject的使用方法
- PHP反射機(jī)制原理與用法詳解
- PHP反射使用實(shí)例和PHP反射API的中文說明
- 解析php中反射的應(yīng)用
- PHP反射機(jī)制用法實(shí)例
- 在PHP中使用反射技術(shù)的架構(gòu)插件使用說明
- php反射類ReflectionClass用法分析
- PHP 反射(Reflection)使用實(shí)例
- PHP基于反射機(jī)制實(shí)現(xiàn)自動(dòng)依賴注入的方法詳解
- PHP進(jìn)階學(xué)習(xí)之反射基本概念與用法分析
相關(guān)文章
使用ob系列函數(shù)實(shí)現(xiàn)PHP網(wǎng)站頁面靜態(tài)化
php頁面緩存主要用到的是ob系列函數(shù),如ob_start(),ob_end_flush(),ob_get_contents() ,今天我們來談?wù)勈褂眠@些函數(shù)來實(shí)現(xiàn)php網(wǎng)站頁面靜態(tài)化2014-08-08解析yahoo郵件用phpmailer發(fā)送的實(shí)例
本篇文章是對(duì)yahoo郵件用phpmailer發(fā)送的實(shí)例進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06PHP網(wǎng)頁游戲?qū)W習(xí)之Xnova(ogame)源碼解讀(十四)
這篇文章主要介紹了PHP網(wǎng)頁游戲Xnova(ogame)源碼解讀的資源更新頁面部分,需要的朋友可以參考下2014-06-06淺談php fopen下載遠(yuǎn)程文件的函數(shù)
下面小編就為大家?guī)硪黄獪\談php fopen下載遠(yuǎn)程文件的函數(shù)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-11-11CodeIgniter擴(kuò)展核心類實(shí)例詳解
這篇文章主要介紹了CodeIgniter擴(kuò)展核心類,結(jié)合實(shí)例形式分析了CodeIgniter針對(duì)核心類的擴(kuò)展方法與擴(kuò)展CI類庫與輔助函數(shù)的實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-01-01laravel 5.3 單用戶登錄簡(jiǎn)單實(shí)現(xiàn)方法
今天小編就為大家分享一篇laravel 5.3 單用戶登錄簡(jiǎn)單實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-10-10