Heim > Backend-Entwicklung > PHP-Tutorial > Ausführliche Erläuterung von Designbeispielen des PHP-Reflexionsmechanismus-Implementierungs-Plug-Ins

Ausführliche Erläuterung von Designbeispielen des PHP-Reflexionsmechanismus-Implementierungs-Plug-Ins

伊谢尔伦
Freigeben: 2023-03-12 09:34:02
Original
1787 Leute haben es durchsucht

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();
}
Nach dem Login kopieren

3. Plug-in-interne Implementierungsschnittstelle

Plugin1 implementiert die Schnittstelle:

<?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 />";
}
}
?>
Nach dem Login kopieren

Plugin2 implementiert die Schnittstelle:

<?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 />";
}
}
?>
Nach dem Login kopieren

4. Die Hauptseite wird initialisiert das Hauptnavigationsmenü

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

5. Durchsuchen Sie das Plug-in-Verzeichnis und laden Sie alle 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";
}
}
Nach dem Login kopieren

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(&#39;IPlugin&#39;)){
//插件初始化
$refClass->getMethod(&#39;init&#39;)->invoke(null);
//获取注入菜单
$menuItem = $refClass->getMethod(&#39;getMenu&#39;)->invoke(null);
//合并菜单项
$menu = array_merge($menu, array($menuItem));
}
}
Nach dem Login kopieren

7. Hauptseiten-Ausgabemenü HTML

foreach ($menu as $m){
echo "<a href=&#39;{$m[&#39;href&#39;]}&#39;>{$m[&#39;text&#39;]}</a> ";
}
Nach dem Login kopieren

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(&#39;getMenu&#39;)->invoke(null);
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage