In diesem Artikel wird hauptsächlich das Plug-In-Design vorgestellt, das in PHP basierend auf dem Reflexionsmechanismus implementiert wird. Er analysiert die Funktionen von Plug-Ins, das Prinzip des Reflexionsmechanismus und die Schritte zur Implementierung des Plug-In-Designs im Detail Beispiele. Freunde, die es brauchen, können als Referenz dienen:
Das Beispiel in diesem Artikel beschreibt das steckbare Design von Plug-Ins, die auf dem Reflexionsmechanismus basieren. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:
Freunde, die sagen, dass PHP und ASP gleichwertig sind, können hier aufhören, PHP unterstützt Reflektion und ist immer noch sehr leistungsfähig. Okay, beginnen wir mit dem heutigen Thema.
Funktionsbeschreibung:
Die Seite verfügt über ein Hauptnavigationsmenü mit mehreren Standardverbindungen.
Plug-ins werden in einem einheitlichen Verzeichnis gespeichert. Nachdem das Plug-in geladen wurde, werden die erforderlichen Links automatisch zum Navigationsmenü hinzugefügt.
Das Plug-in kann beim Laden bestimmte Vorgänge ausführen.
Das dynamische Hinzufügen und Löschen von Plug-Ins erfordert keine Codeänderungen.
Endgültiger Effekt:
Homepage, Plug-in 1, Plug-in 2
„Homepage“ ist ein Menüpunkt, der mitgeliefert wird das System. „Plugin1“ und „Plugin2“ sind von Plugins registrierte Menüpunkte.
Implementierungsprozess:
1. Dateistruktur
Lernen
Plugin
plugin1.php
plugin2.php
test.php
Nach diesem Design lautet der Seiteneingang test.php und die Plug-Ins werden im Plugin-Verzeichnis gespeichert von ihnen durch Durchlaufen des Plugin-Verzeichnisses.
2. Design-Plug-in-Schnittstelle
interface IPlugin{ static function getname(); static function init(); static function getMenu(); }
3. Plug-in-interne Implementierungsschnittstelle
Plugin1 implementiert die Schnittstelle:
<?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 />"; } } ?>
Plugin2 implementiert die Schnittstelle:
<?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. Die Hauptseite wird initialisiert das Hauptnavigationsmenü
$menu[] = array( 'text'=>'首页', 'href'=>'/test.php' );
5. Durchsuchen Sie das Plug-in-Verzeichnis und laden Sie alle 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. Filtern Sie Plug-Ins heraus, die die IPlugin-Schnittstelle implementieren und Plug-In-Injection-Vorgänge durchführen.
// 反射执行方法(注入菜单) 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. Hauptseiten-Ausgabemenü HTML
foreach ($menu as $m){ echo "<a href='{$m['href']}'>{$m['text']}</a> "; }
Beachten Sie, dass Teil 6 PHP Reflection ist Die Bedienung ist doch ganz einfach, oder? Bei der Analyse des Codes sind für eine vollständige Reflexionsoperation nur zwei Codezeilen erforderlich!
$refClass = new ReflectionClass($class); $menuItem = $refClass->getMethod('getMenu')->invoke(null);
Okay, das war's mit der Einführung in die Grundfunktionen der Reflexion. Natürlich ist die Reflexionsfunktion von PHP mehr als nur das. Wenn Sie interessiert sind, erkunden Sie sie selbst.
Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung von Designbeispielen des PHP-Reflexionsmechanismus-Implementierungs-Plug-Ins. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!