ホームページ >バックエンド開発 >PHPチュートリアル >PHPリフレクションクラスの利用分析 ReflectionClass_phpスキル

PHPリフレクションクラスの利用分析 ReflectionClass_phpスキル

WBOY
WBOYオリジナル
2016-05-16 08:59:523583ブラウズ

この記事の例では、php リフレクション クラス reflectionclass の使用法について説明します。参考のために全員と共有してください。詳細は次のとおりです。

まずコードの一部を見てみましょう:

/**
 * @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);

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(); //执行 fuc 里的方法ec
/*最后输出:我是一个类*/

さらに高度な使用法もいくつかあります

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

上記のプロセスはよく知られているかもしれません。実際、これはオブジェクトを呼び出すメソッドと似ています。

それは単に逆であり、メソッドが前にあり、オブジェクトが後ろにあるだけです。

補足: ここでは、読者が圧縮された php コードをオンラインでフォーマットしやすくする、この web サイト上のオンライン php コード フォーマット ツールをお勧めします。便利で実用的です。

php コードのオンライン書式設定および美化ツール:
http://tools.jb51.net/code/phpformat

さらに php 関連のコンテンツに興味のある読者は、このサイトの特別トピック「完全な php 配列 (array) 操作スキル」を参照してください。 "、"php 並べ替えアルゴリズムの概要"、" php で一般的に使用されるトラバーサル アルゴリズムとテクニックの概要」、「php データ構造とアルゴリズムのチュートリアル」 、「php プログラミング アルゴリズムの概要」、「php」数学的演算スキルの概要 a>》、《php 正規表現の使用法の概要》、"php の操作と演算子の使用法の概要"、"php 文字列 (文字列) の使用法の概要" および "php における一般的なデータベース操作スキルの概要"

この記事が php プログラミングのすべての人に役立つことを願っています。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。