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

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

先來看一段代碼:

/**

 * @name PHP反射API--利用反射技術實現(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反射類的一個應用。

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

舉個例子:

class fuc { //定義一個類

 static

 function ec() {

  echo '我是一個類';

 }

}

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

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

$fuc=$class->newInstance(); //相當于實例化 fuc 類

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

/*最后輸出:我是一個類*/

其中還有一些更高級的用法

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

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

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

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

希望本文所述對大家PHP程序設計有所幫助。

更多信息請查看網(wǎng)絡編程
易賢網(wǎng)手機網(wǎng)站地址:php反射類ReflectionClass用法分析

2025國考·省考課程試聽報名

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)