php利用反射實現(xiàn)插件機制的方法
更新時間:2015年03月14日 10:37:53 作者:work24
這篇文章主要介紹了php利用反射實現(xiàn)插件機制的方法,涉及php反射機制與插件的實現(xiàn)技巧,需要的朋友可以參考下
本文實例講述了php利用反射實現(xiàn)插件機制的方法。分享給大家供大家參考。具體實現(xiàn)方法如下:
復制代碼 代碼如下:
<?php
/**
* @name PHP反射API--利用反射技術(shù)實現(xiàn)的插件系統(tǒng)架構(gòu)
*/
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;
}
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' ));
}
}
$menu = computeMenu();
$articles = computeArticles();
print_r($menu);
print_r($articles);
/**
* @name PHP反射API--利用反射技術(shù)實現(xiàn)的插件系統(tǒng)架構(gòu)
*/
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;
}
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' ));
}
}
$menu = computeMenu();
$articles = computeArticles();
print_r($menu);
print_r($articles);
希望本文所述對大家的php程序設(shè)計有所幫助。
您可能感興趣的文章:
- PHP使用反射機制實現(xiàn)查找類和方法的所在位置
- PHP反射類ReflectionClass和ReflectionObject的使用方法
- PHP面向?qū)ο蟪绦蛟O(shè)計之類與反射API詳解
- php反射類ReflectionClass用法分析
- PHP通過反射動態(tài)加載第三方類和獲得類源碼的實例
- PHP類的反射用法實例
- PHP的反射類ReflectionClass、ReflectionMethod使用實例
- 反射調(diào)用private方法實踐(php、java)
- PHP 反射機制實現(xiàn)動態(tài)代理的代碼
- 解析php中反射的應用
- PHP反射機制用法實例
- PHP基于反射獲取一個類中所有的方法
相關(guān)文章
PHP中=賦值操作符對不同數(shù)據(jù)類型的不同行為
作為一個PHP的新手,一直對PHP的引用困惑了很久,今晚仔細看了用戶手冊和做了一些實驗,終于明白了其中的原理和細節(jié),特別是=操作符對于不同類型的不同行為。2011-01-01jQuery+php實現(xiàn)ajax文件即時上傳的詳解
本篇文章是對jQuery+php實現(xiàn)ajax文件即時上傳的方法進行了詳細的分析介紹,需要的朋友參考下2013-06-06