php利用反射實現(xiàn)插件機(jī)制的方法
更新時間:2015年03月14日 10:37:53 作者:work24
這篇文章主要介紹了php利用反射實現(xiàn)插件機(jī)制的方法,涉及php反射機(jī)制與插件的實現(xiàn)技巧,需要的朋友可以參考下
本文實例講述了php利用反射實現(xiàn)插件機(jī)制的方法。分享給大家供大家參考。具體實現(xiàn)方法如下:
復(fù)制代碼 代碼如下:
<?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使用反射機(jī)制實現(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 反射機(jī)制實現(xiàn)動態(tài)代理的代碼
- 解析php中反射的應(yīng)用
- PHP反射機(jī)制用法實例
- PHP基于反射獲取一個類中所有的方法
相關(guān)文章
php讀取遠(yuǎn)程gzip壓縮網(wǎng)頁的方法
這篇文章主要介紹了php讀取遠(yuǎn)程gzip壓縮網(wǎng)頁的方法,當(dāng)站點使用gzip壓縮時,使用常規(guī)的遠(yuǎn)程獲取方法會得到亂碼結(jié)果,使用本文方法即可解決這個問題,需要的朋友可以參考下2014-12-12
實現(xiàn) win2003 下 mysql 數(shù)據(jù)庫每天自動備份
這篇文章主要為大家介紹下,如果用批處理實現(xiàn)mysql的自動備份,需要的朋友可以參考下2006-12-12
php計算數(shù)組相同值出現(xiàn)次數(shù)的代碼(array_count_values)
這篇文章主要介紹了php計算數(shù)組相同值出現(xiàn)次數(shù)的代碼,需要的朋友可以參考下2015-01-01

