PHP反映機構実装プラグインの設計例を詳しく解説

伊谢尔伦
リリース: 2023-03-12 09:34:02
オリジナル
1761 人が閲覧しました

この記事では、リフレクション メカニズムに基づいて PHP で実装されるプラグインの設計を主に紹介し、プラグインの機能、リフレクション メカニズムの原理、およびプラガブル デザインを実装する手順を例の形式で詳細に分析します。必要な友達は以下を参照してください

この記事の例では、PHP がリフレクション メカニズムに基づいてプラグインのプラグイン可能な設計を実装する方法について説明します。参考までに皆さんと共有してください。詳細は次のとおりです:

PHP と ASP は同等であるという友人は、ここで止めても構いません。PHP はリフレクションをサポートしており、依然として非常に強力です。さて、今日の話題を始めましょう。

機能の説明:

このページには、いくつかのデフォルト接続を備えたメインナビゲーションメニューがあります。
プラグインは統合されたディレクトリに保存され、プラグインがロードされると、必要なリンクがナビゲーション メニューに自動的に追加されます。
プラグインはロード時に特定の操作を実行できます。
コードを変更せずにプラグインを動的に追加および削除します。

最終効果:

ホームページ、プラグイン 1、プラグイン 2

「ホームページ」はシステムに付属するメニュー項目です。 「Plugin1」と「Plugin2」はプラグインによって登録されるメニュー項目です。

実装プロセス:

1. ファイル構造

この設計の後、ページの入り口はtest.phpとなり、プラグインはプラグイン ディレクトリに保存されており、プラグイン ディレクトリをたどることですべてのプラグインを見つけることができます。



2. プラグインインターフェースの設計

3. プラグイン内部実装インターフェース

Plugin1 実装インターフェース:

interface IPlugin{
static function getname();
static function init();
static function getMenu();
}
ログイン後にコピー
Plugin2 実装インターフェース:
<?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 />";
}
}
?>
ログイン後にコピー

4.メインページの初期化 Mainナビゲーション メニュー

<?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 />";
}
}
?>
ログイン後にコピー

5. プラグイン ディレクトリを検索し、すべてのプラグインをロードします

$menu[] = array(
&#39;text&#39;=>&#39;首页&#39;,
&#39;href&#39;=>&#39;/test.php&#39;
);
ログイン後にコピー

6. IPlugin インターフェイスを実装し、プラグイン インジェクション操作を実行するプラグインを除外します。

$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";
}
}
ログイン後にコピー

7. メインページの出力メニューHTML

// 反射执行方法(注入菜单)
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));
}
}
ログイン後にコピー

パート6はPHPのリフレクション操作であることに注意してください、それは非常に簡単ですか?コードを分析すると、完全な反映操作のタイミングはわずか 2 行のコードだけです。

foreach ($menu as $m){
echo "<a href=&#39;{$m[&#39;href&#39;]}&#39;>{$m[&#39;text&#39;]}</a> ";
}
ログイン後にコピー
以上、リフレクションの基本機能の紹介でした。もちろん、PHP のリフレクション機能はそれだけではありません。興味があれば、ぜひ調べてみてください。

以上がPHP反映機構実装プラグインの設計例を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート