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

WBOY
リリース: 2016-05-16 08:59:52
オリジナル
3541 人が閲覧しました

この記事の例では、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 プログラミングのすべての人に役立つことを願っています。

関連ラベル:
php
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート