Cet article présente principalement la conception enfichable des plug-ins implémentés en PHP basée sur le mécanisme de réflexion. Il analyse en détail les fonctions des plug-ins, le principe du mécanisme de réflexion et les étapes pour implémenter la conception enfichable sous la forme de. Des exemples. Les amis qui en ont besoin peuvent Pour référence,
L'exemple de cet article décrit la conception enfichable des plug-ins implémentés en PHP sur la base du mécanisme de réflexion. Partagez-le avec tout le monde pour référence, les détails sont les suivants :
Les amis qui disent que PHP et ASP sont équivalents peuvent s'arrêter ici. PHP prend en charge la réflexion et est toujours très puissant. Bon, commençons le sujet d'aujourd'hui.
Description de la fonction :
La page dispose d'un menu de navigation principal avec plusieurs connexions par défaut.
Les plug-ins sont stockés dans un répertoire unifié. Une fois le plug-in chargé, les liens requis seront automatiquement ajoutés au menu de navigation.
Le plug-in peut effectuer certaines opérations lors du chargement.
L'ajout et la suppression dynamiques de plug-ins ne nécessitent aucune modification du code.
Effet final :
Page d'accueil, plug-in 1, plug-in 2
"Page d'accueil" est un élément de menu fourni avec le système. "Plugin1" et "Plugin2" sont des éléments de menu enregistrés par les plugins.
Processus de mise en œuvre :
1. Structure des fichiers
Apprendre
plugin
plugin1.php
plugin2.php
test.php
Après cette conception, l'entrée de la page est test.php et les plug-ins sont stockés dans le répertoire des plugins. parcourez le répertoire du plugin pour trouver tous les plug-ins.
2. Concevoir l'interface du plug-in
interface IPlugin{ static function getname(); static function init(); static function getMenu(); }
3. >
Plugin1 implémente l'interface :<?php Class Welcome implements IPlugin{ static function getname(){ return 'Welcome (Plugin)'; } static function getMenu(){ return array( 'text'=>'插件1′, 'href'=>'http://www.google.com' ); } static function init(){ echo self::getname() . " 载入中…<br />"; } } ?>
<?php Class ShowAD implements IPlugin{ static function getname(){ return 'Show AD (Plugin)'; } static function getMenu(){ return array( 'text'=>'插件2′, 'href'=>'http://www.live.com' ); } static function init(){ echo self::getname() . " 载入中…<br />"; } } ?>
4. le menu de navigation principal
$menu[] = array( 'text'=>'首页', 'href'=>'/test.php' );
5. Parcourez le répertoire des plug-ins et chargez tous les plug-ins
$pluginPath = $_SERVER['DOCUMENT_ROOT'] . '/plugin'; $dirHd = opendir($pluginPath); while ($file = readdir($dirHd)){ $pluginFilePath = $pluginPath . '/' . $file; if($file!='.' && $file!='..' && is_file($pluginFilePath)){ include "$pluginFilePath"; } }
6. Filtrez les plug-ins qui implémentent l'interface IPlugin et effectuent des opérations d'injection de plug-ins.
// 反射执行方法(注入菜单) foreach (get_declared_classes() as $class){ $refClass = new ReflectionClass($class); if($refClass->implementsInterface('IPlugin')){ //插件初始化 $refClass->getMethod('init')->invoke(null); //获取注入菜单 $menuItem = $refClass->getMethod('getMenu')->invoke(null); //合并菜单项 $menu = array_merge($menu, array($menuItem)); } }
7. Menu de sortie de la page principale HTML
foreach ($menu as $m){ echo "<a href='{$m['href']}'>{$m['text']}</a> "; }
$refClass = new ReflectionClass($class); $menuItem = $refClass->getMethod('getMenu')->invoke(null);
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!