ホームページ  >  記事  >  バックエンド開発  >  PHP リフレクション メカニズムは、プラグインのプラグイン可能な設計を実装します。

PHP リフレクション メカニズムは、プラグインのプラグイン可能な設計を実装します。

WBOY
WBOYオリジナル
2016-06-23 13:14:35983ブラウズ

PHP と ASP は同等であるという友人は、ここでやめてください。PHP はリフレクションをサポートしており、非常に強力です。さて、今日の話題を始めましょう。 機能の説明: このページには、いくつかのデフォルト接続を備えたメイン ナビゲーション メニューがあります。
プラグインは統合されたディレクトリに保存され、プラグインがロードされると、必要なリンクがナビゲーション メニューに自動的に追加されます。
プラグインはロード時に特定の操作を実行できます。
コードを変更せずにプラグインを動的に追加および削除します。 最終効果: ホームページ、プラグイン 1、プラグイン 2
「ホームページ」はシステムに付属のメニュー項目です。 「Plugin1」「Plugin2」はプラグインによって登録されるメニュー項目です。 実装プロセス:1. ファイル構造
Learn
plugin
plugin1.php
plugin2.php
test.php このように設計すると、ページエントリはtest.phpとなり、プラグインは以下に保存されます。プラグイン ディレクトリをたどるだけで、すべてのプラグインが見つかります。 2. プラグイン インターフェイスの設計インターフェイス IPlugin{
static function getname();
static function init();
static function getMenu();
}3. プラグインの内部実装インターフェイスPlugin1 実装インターフェイス: クラスへようこそは、IPlugin{
static function getname(){
return 'Welcome (Plugin)';
}static function getMenu(){
return array(
'text'=>'Plugin 1',
'href'= >'http://www.google.com'
);
}静的関数 init(){
echo self::getname() ” 読み込み中...
” ;
}
}
?>Plugin2 はインターフェイスを実装します: Class ShowAD は 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() . ” Load Medium...
”;
}
}
?>4. メインページはメインナビゲーションメニューを初期化します$menu[] = array(
'text' =>'Home',
'href' =>'/test.php'
);5. プラグイン ディレクトリを走査し、すべてのプラグインをロードします$pluginPath = $_SERVER['DOCUMENT_ROOT']。 '/plugin';$dirHd = opendir($pluginPath);
while ($file = readdir($dirHd)){
$pluginFilePath = $pluginPath . $file;
if($file!=') ' && $file!='..' && is_file($pluginFilePath )){
include “$pluginFilePath”;
}
}6. IPlugin インターフェイスを実装し、プラグイン インジェクション操作を実行するプラグインを除外します。 // リフレクション実行メソッド(インジェクションメニュー)
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. メインページの出力メニュー HTMLforeach ($menu as $m){
echo “< ;a href='{$m['href']}'>{$m['text']} ";
}パート 6 は PHP のリフレクション操作であることに注意してください。とても簡単なことではありませんか?コードを分析すると、完全な反映操作のタイミングはわずか 2 行のコードだけです。 $refClass = new ReflectionClass($class);
$menuItem = $refClass->getMethod(‘getMenu’)->invoke(null);さて、リフレクションの基本的な機能については以上です。もちろん、PHP のリフレクション機能はそれだけではありません。興味があれば、ぜひ調べてみてください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。