Analisis penggunaan kelas refleksi php kemahiran ReflectionClass_php

WBOY
Lepaskan: 2016-05-16 08:59:52
asal
3529 orang telah melayarinya

Contoh dalam artikel ini menerangkan penggunaan kelas refleksi php ReflectionClass. Kongsikan dengan semua orang untuk rujukan anda, butirannya adalah seperti berikut:

Mari kita lihat sekeping kod dahulu:

/**
 * @name PHP反射API--利用反射技术实现的插件系统架构
 * @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);

Salin selepas log masuk

kod plugin.php adalah seperti berikut:

<&#63;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));
 }
}

Salin selepas log masuk

Kod di atas ialah aplikasi kelas refleksi PHP.

Apakah kelas refleksi PHP? Seperti namanya, ia boleh difahami sebagai pemetaan kelas.

Contohnya:

class fuc { //定义一个类
 static
 function ec() {
  echo '我是一个类';
 }
}
$class=new ReflectionClass('fuc'); //建立 fuc这个类的反射类

Salin selepas log masuk

Mengenai apa yang ada dalam kelas refleksi $class, anda boleh menyemak manual, tetapi saya tidak akan menerangkannya secara terperinci di sini

$fuc=$class->newInstance(); //相当于实例化 fuc 类
$fuc->ec(); //执行 fuc 里的方法ec
/*最后输出:我是一个类*/

Salin selepas log masuk

Terdapat juga beberapa kegunaan yang lebih maju

$ec=$class->getmethod('ec'); //获取fuc 类中的ec方法
$fuc=$class->newInstance(); //实例化
$ec->invoke($fuc);   //执行ec 方法

Salin selepas log masuk

Proses di atas sepatutnya biasa. Malah, ia serupa dengan kaedah memanggil objek

Cuma ia adalah sebaliknya, dengan kaedah di hadapan dan objek di belakang

Tambahan : Di sini kami mengesyorkan alat pemformatan kod PHP dalam talian di tapak web ini, yang boleh memudahkan pembaca membaca kod PHP termampat yang diformatkan dalam talian, yang mudah dan praktikal !

alat pemformatan dan pengindahan dalam talian kod php:
http://tools.jb51.net/code/phpformat

Pembaca yang berminat dengan lebih banyak kandungan berkaitan PHP boleh menyemak topik khas tapak ini: "Koleksi komprehensif kemahiran operasi tatasusunan (Array) PHP", "Ringkasan pengisihan PHP algoritma", " Ringkasan algoritma dan teknik traversal yang biasa digunakan dalam PHP", "struktur data PHP dan tutorial algoritma", "Ringkasan algoritma pengaturcaraan PHP", "matematik PHP Ringkasan kemahiran operasi ", "Ringkasan penggunaan ungkapan biasa php", "Ringkasan operasi PHP dan penggunaan operator", "Ringkasan penggunaan rentetan php (rentetan) " dan "Ringkasan kemahiran operasi pangkalan data PHP biasa "

Saya harap artikel ini akan membantu semua orang dalam pengaturcaraan PHP.

Label berkaitan:
php
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan