ホームページ >バックエンド開発 >PHPチュートリアル >ReflectionClass: PHP のリフレクション クラス

ReflectionClass: PHP のリフレクション クラス

WBOY
WBOYオリジナル
2016-06-13 13:01:49765ブラウズ

ReflectionClass:PHP 内の反射クラス
インターフェース Iplugin{
パブリック静的関数 getName();
}
function findPlugins(){
$plugins = array();
foreach (get_declared_classes() as $class){
$reflectionClass = new ReflectionClass($class);
if ($reflectionClass->implementsInterface('Iplugin')) {
$plugins[] = $reflectionClass;
}
}
return $plugins;
}
関数 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);
}
}
$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);
}
}
$articles を返す;
}
require_once('plugin.php');
$menu = computeMenu();
$articles = computeArticles();
print_r($menu);
print_r($articles);
//plugin.php 代码如下
class MycoolPuginimplements 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'=>'これは本当に素晴らしい記事です','text '=>xxxxxxxxx));
}
} 上記のコードは php 反射型のアプリケーションの 1 つです。 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 メソッドを実行します
上の手順はよく知られていますが、ここで逆になる点を除いて、
でオブジェクトを調整する方法は、メソッドが前にあり、オブジェクトが後にあります。

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