最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解析php中反射的應(yīng)用

 更新時(shí)間:2013年06月18日 14:54:48   作者:  
本篇文章是對php中反射的應(yīng)用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
一  反射的使用:
復(fù)制代碼 代碼如下:

<?php
class Person{
 public $name;
 function __construct($name){
  $this->name=$name;
 }
}
interface Module{
 function execute();
}
class FtpModule implements Module{
 function setHost($host){
  print "FtpModule::setHost():$host\n";
 }
 function setUser($user){
  print "FtpModule::setUser():$user\n";
 }
 function execute(){
  //something
 }
}
class PersonModule implements Module{
 function setPerson(Person $person){
  print "PersonModule::setPerson:{$person->name}\n";
 }
 function execute(){
  //something
 }
}
class ModuleRunner{
 private $configData
        =array(
          "PersonModule"=>array('person'=>'bob'),
          "FtpModule"=>array('host'=>'example.com','user'=>'anon')
        );
 private $modules=array();
 function init(){
  $interface=new ReflectionClass('Module');
  foreach($this->configData as $modulename=>$params){
   $module_class=new ReflectionClass($modulename);//根據(jù)配置configData的名稱,實(shí)例化ReflectionClass
   if(!$module_class->isSubclassOf($interface)){//檢查反射得到了類是否是$interface的子類
    throw new Exception("unknown module type:$modulename");//不是Module子類則拋出異常
   }
   $module=$module_class->newInstance();//實(shí)例化一個(gè)FtpModule或者PersonModule對象
   foreach($module_class->getMethods() as $method){//獲得類中的方法
    $this->handleMethod($module,$method,$params);
   }
   array_push($this->modules,$module);//將實(shí)例化的module對象放入$modules數(shù)組中
  }
 }
 function handleMethod(Module $module,ReflectionMethod $method,$params){
  $name=$method->getName();//獲得方法名稱
  $args=$method->getParameters();//獲得方法中的參數(shù)
  if(count($args)!=1||substr($name,0,3)!="set"){//檢查方法必須是以set開頭,且只有一個(gè)參數(shù)
   return false;
  }
  $property=strtolower(substr($name,3));//講方法名去掉set三個(gè)字母,作為參數(shù)
  if(!isset($params[$property])){//如果$params數(shù)組不包含某個(gè)屬性,就返回false
   return false;
  }
  $arg_class=@$args[0]->getClass;//檢查setter方法的第一個(gè)參數(shù)(且唯一)的數(shù)據(jù)類型
  if(empty($arg_class)){
   $method->invoke($module,$params[$property]);
  }else{
   $method->invoke($module,$arg_class->newInstance($params[$property]));
  }
 }
}
$test=new ModuleRunner();
$test->init();
?>

二  通過反射獲得類中信息:
復(fù)制代碼 代碼如下:

<PRE class=php name="code"><?php
class ReflectionUtil{
 static function getClassSource(ReflectionClass $class){
  $path=$class->getFileName();
  $lines=@file($path);
  $from=$class->getStartLine();
  $to=$class->getEndLine();
  $len=$to-$from+1;
  return implode(array_slice($lines,$from-1,$len));
 }
}
$classname="Person";
$path="../practice/{$classname}.php";
if(!file_exists($path)){
  throw new Exception("No such file as {$path}");
}
require_once($path);
if(!class_exists($classname)){
 throw new Exception("No such class as {$classname}");
}
print ReflectionUtil::getClassSource(new ReflectionClass('Person'));
?>
</PRE><BR>
<PRE></PRE>
結(jié)果是:class Person{ public $age; public $name; function getName(){return "zjx";} function getAge(){return 12;} function __toString(){ $rs=$this->getName(); $rs.="(age".$this->getAge().")"; return $rs; } }
<PRE></PRE>
<PRE></PRE>
<PRE></PRE>
<PRE></PRE>

相關(guān)文章

  • PHP中spl_autoload_register()函數(shù)用法實(shí)例詳解

    PHP中spl_autoload_register()函數(shù)用法實(shí)例詳解

    這篇文章主要介紹了PHP中spl_autoload_register()函數(shù)用法,結(jié)合實(shí)例形式分析了__autoload函數(shù)及spl_autoload_register函數(shù)的相關(guān)使用技巧,需要的朋友可以參考下
    2016-07-07
  • Yii中render和renderPartial的區(qū)別

    Yii中render和renderPartial的區(qū)別

    這篇文章主要介紹了Yii中render和renderPartial的區(qū)別,以下由我們在信易網(wǎng)絡(luò)公司開發(fā)項(xiàng)目的時(shí)候終結(jié)出的一些經(jīng)驗(yàn)
    2014-09-09
  • ThinkPHP與PHPExcel沖突解決方法

    ThinkPHP與PHPExcel沖突解決方法

    最近一個(gè)項(xiàng)目需要批量導(dǎo)入Excel數(shù)據(jù),要用到PHP讀取Excel中的內(nèi)容然后導(dǎo)入到數(shù)據(jù)庫。
    2011-08-08
  • PHP目錄操作實(shí)例總結(jié)

    PHP目錄操作實(shí)例總結(jié)

    這篇文章主要介紹了PHP目錄操作,結(jié)合實(shí)例形式總結(jié)分析了php針對目錄的讀取、遍歷、關(guān)閉等常見操作的相關(guān)函數(shù)與使用技巧,需要的朋友可以參考下
    2016-09-09
  • php的curl實(shí)現(xiàn)get和post的代碼

    php的curl實(shí)現(xiàn)get和post的代碼

    類似于dreamhost這類主機(jī)服務(wù)商,是顯示fopen的使用的。使用php的curl可以實(shí)現(xiàn)支持FTP、FTPS、HTTP HTPPS SCP SFTP TFTP TELNET DICT FILE和LDAP。
    2008-08-08
  • 原生JS實(shí)現(xiàn)Ajax通過POST方式與PHP進(jìn)行交互的方法示例

    原生JS實(shí)現(xiàn)Ajax通過POST方式與PHP進(jìn)行交互的方法示例

    這篇文章主要介紹了原生JS實(shí)現(xiàn)Ajax通過POST方式與PHP進(jìn)行交互的方法,涉及ajax使用post方式與后臺交互及php數(shù)據(jù)接收、處理、查詢數(shù)據(jù)庫等相關(guān)操作技巧,需要的朋友可以參考下
    2018-05-05
  • PHP操作數(shù)組的一些函數(shù)整理介紹

    PHP操作數(shù)組的一些函數(shù)整理介紹

    PHP中最常用到的數(shù)據(jù)結(jié)構(gòu)就是數(shù)組,數(shù)組可以幫我們解決很大一部分的編程問題。其實(shí)有很多數(shù)組操作不用我們自己寫,系統(tǒng)已經(jīng)自帶了相關(guān)的函數(shù)了。下面我們介紹一些關(guān)于PHP數(shù)組操作的函數(shù),也許有些你沒有聽說過。
    2011-07-07
  • PHP實(shí)現(xiàn)采集抓取淘寶網(wǎng)單個(gè)商品信息

    PHP實(shí)現(xiàn)采集抓取淘寶網(wǎng)單個(gè)商品信息

    這篇文章主要介紹了PHP實(shí)現(xiàn)采集抓取淘寶網(wǎng)單個(gè)商品信息,本文是一種實(shí)現(xiàn)思路,使用file_get_contents函數(shù)實(shí)現(xiàn),并給出了采集正則,需要的朋友可以參考下
    2015-01-01
  • php實(shí)現(xiàn)連接access數(shù)據(jù)庫并轉(zhuǎn)txt寫入的方法

    php實(shí)現(xiàn)連接access數(shù)據(jù)庫并轉(zhuǎn)txt寫入的方法

    這篇文章主要介紹了php實(shí)現(xiàn)連接access數(shù)據(jù)庫并轉(zhuǎn)txt寫入的方法,涉及php連接、讀取access數(shù)據(jù)庫及寫入txt文件的相關(guān)操作技巧,需要的朋友可以參考下
    2017-02-02
  • php自定義apk安裝包實(shí)例

    php自定義apk安裝包實(shí)例

    這篇文章主要介紹了php自定義apk安裝包的方法,主要通過ZipArchive類來實(shí)現(xiàn)這一功能,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-10-10

最新評論

封丘县| 锡林郭勒盟| 莎车县| 中山市| 平罗县| 辽源市| 南皮县| 长子县| 唐山市| 隆子县| 宣武区| 威远县| 濮阳市| 安福县| 仪征市| 五寨县| 冕宁县| 濮阳县| 安西县| 宜良县| 宁津县| 卢龙县| 清镇市| 梨树县| 金堂县| 新巴尔虎右旗| 涞水县| 长寿区| 绍兴县| 弥勒县| 锡林郭勒盟| 平山县| 湘阴县| 仁寿县| 花莲市| 泌阳县| 柯坪县| 甘孜| 本溪市| 哈尔滨市| 洛隆县|