Maison  >  Article  >  développement back-end  >  Explication détaillée des exemples de conception du plug-in d'implémentation du mécanisme de réflexion PHP

Explication détaillée des exemples de conception du plug-in d'implémentation du mécanisme de réflexion PHP

伊谢尔伦
伊谢尔伦original
2017-07-01 11:25:111744parcourir

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 &#39;Welcome (Plugin)&#39;;
}
static function getMenu(){
return array(
&#39;text&#39;=>&#39;插件1′,
&#39;href&#39;=>&#39;http://www.google.com&#39;
);
}
static function init(){
echo self::getname() . " 载入中…<br />";
}
}
?>
Plugin2 implémente l'interface :

<?php
Class ShowAD implements IPlugin{
static function getname(){
return &#39;Show AD (Plugin)&#39;;
}
static function getMenu(){
return array(
&#39;text&#39;=>&#39;插件2′,
&#39;href&#39;=>&#39;http://www.live.com&#39;
);
}
static function init(){
echo self::getname() . " 载入中…<br />";
}
}
?>

4. le menu de navigation principal

$menu[] = array(
&#39;text&#39;=>&#39;首页&#39;,
&#39;href&#39;=>&#39;/test.php&#39;
);

5. Parcourez le répertoire des plug-ins et chargez tous les plug-ins

$pluginPath = $_SERVER[&#39;DOCUMENT_ROOT&#39;] . &#39;/plugin&#39;;
$dirHd = opendir($pluginPath);
while ($file = readdir($dirHd)){
$pluginFilePath = $pluginPath . &#39;/&#39; . $file;
if($file!=&#39;.&#39; && $file!=&#39;..&#39; && 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(&#39;IPlugin&#39;)){
//插件初始化
$refClass->getMethod(&#39;init&#39;)->invoke(null);
//获取注入菜单
$menuItem = $refClass->getMethod(&#39;getMenu&#39;)->invoke(null);
//合并菜单项
$menu = array_merge($menu, array($menuItem));
}
}

7. Menu de sortie de la page principale HTML

foreach ($menu as $m){
echo "<a href=&#39;{$m[&#39;href&#39;]}&#39;>{$m[&#39;text&#39;]}</a> ";
}
Notez que la partie 6 est une réflexion PHP. le fonctionnement est très simple, n'est-ce pas ? En analysant le code, une opération de réflexion complète ne comporte que 2 lignes de code !

$refClass = new ReflectionClass($class);
$menuItem = $refClass->getMethod(&#39;getMenu&#39;)->invoke(null);
Bon, c'est tout pour présenter les fonctions de base de la réflexion. Bien sûr, la fonction de réflexion de PHP est bien plus que cela. Si vous êtes intéressé, explorez-la vous-même.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn