php反射類ReflectionClass用法分析
來源:易賢網(wǎng) 閱讀:594 次 日期:2016-08-23 15:45:30
溫馨提示:易賢網(wǎng)小編為您整理了“php反射類ReflectionClass用法分析”,方便廣大網(wǎng)友查閱!

本文實(shí)例講述了php反射類ReflectionClass用法。分享給大家供大家參考,具體如下:

先來看一段代碼:

/**

 * @name PHP反射API--利用反射技術(shù)實(shí)現(xiàn)的插件系統(tǒng)架構(gòu)

 * @author :PHPCQ.COM

 */

interface Iplugin

{

 public static

 function getName();

}

function findPlugins()

{

 $plugins = array();

 foreach(get_declared_classes() as $class)

 {

  $reflectionClass = new ReflectionClass($class);

  if ($reflectionClass - > implementsInterface('Iplugin'))

  {

   $plugins[] = $reflectionClass;

  }

 }

 return $plugins;

}

function computeMenu()

{

 $menu = array();

 foreach(findPlugins() as $plugin)

 {

  if ($plugin - > hasMethod('getMenuItems'))

  {

   $reflectionMethod = $plugin - > getMethod('getMenuItems');

   if ($reflectionMethod - > isStatic())

   {

    $items = $reflectionMethod - > invoke(null);

   }

   else

   {

    $pluginInstance = $plugin - > newInstance();

    $items = $reflectionMethod - > invoke($pluginInstance);

   }

   $menu = array_merge($menu, $items);

  }

 }

 return $menu;

}

function computeArticles()

{

 $articles = array();

 foreach(findPlugins() as $plugin)

 {

  if ($plugin - > hasMethod('getArticles'))

  {

   $reflectionMethod = $plugin - > getMethod('getArticles');

   if ($reflectionMethod - > isStatic())

   {

    $items = $reflectionMethod - > invoke(null);

   }

   else

   {

    $pluginInstance = $plugin - > newInstance();

    $items = $reflectionMethod - > invoke($pluginInstance);

   }

   $articles = array_merge($articles, $items);

  }

 }

 return $articles;

}

require_once('plugin.php');

$menu = computeMenu();

$articles = computeArticles();

print_r($menu);

print_r($articles);

plugin.php 代碼如下:

<?php

class MycoolPugin implements Iplugin

{

 public static

 function getName()

 {

  return 'MycoolPlugin';

 }

 public static

 function getMenuItems()

 {

  return array(array('description' => 'MycoolPlugin', 'link' => '/MyCoolPlugin'));

 }

 public static

 function getArticles()

 {

  return array(array('path' => '/MycoolPlugin', 'title' => 'This is a really cool article', 'text' => xxxxxxxxx));

 }

}

上述代碼是php反射類的一個(gè)應(yīng)用。

什么是php反射類,顧名思義,可以理解為一個(gè)類的映射。

舉個(gè)例子:

class fuc { //定義一個(gè)類

 static

 function ec() {

  echo '我是一個(gè)類';

 }

}

$class=new ReflectionClass('fuc'); //建立 fuc這個(gè)類的反射類

至于$class 這反射類里有什么東東,可以查看手冊(cè),這里不詳解了

$fuc=$class->newInstance(); //相當(dāng)于實(shí)例化 fuc 類

$fuc->ec(); //執(zhí)行 fuc 里的方法ec

/*最后輸出:我是一個(gè)類*/

其中還有一些更高級(jí)的用法

$ec=$class->getmethod('ec'); //獲取fuc 類中的ec方法

$fuc=$class->newInstance(); //實(shí)例化

$ec->invoke($fuc);   //執(zhí)行ec 方法

上面的過程很熟悉吧。其實(shí)和調(diào)用對(duì)象的方法類似,只不過這里是反著來的,方法在前,對(duì)象在后

希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。

更多信息請(qǐng)查看網(wǎng)絡(luò)編程
易賢網(wǎng)手機(jī)網(wǎng)站地址:php反射類ReflectionClass用法分析
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎn)要咨詢須知 | 加入群交流 | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65317125(9:00—18:00) 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:526150442(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)