>  기사  >  백엔드 개발  >  PHP 반사 메커니즘 구현 플러그인의 설계 예에 대한 자세한 설명

PHP 반사 메커니즘 구현 플러그인의 설계 예에 대한 자세한 설명

伊谢尔伦
伊谢尔伦원래의
2017-07-01 11:25:111744검색

이 기사에서는 주로 리플렉션 메커니즘을 기반으로 PHP로 구현된 플러그인의 플러그형 디자인을 소개합니다. 플러그인의 기능, 리플렉션 메커니즘의 원리 및 플러그형 디자인을 구현하는 단계를 예제 형식으로 자세히 분석합니다. 도움이 필요한 친구는 다음을 참조할 수 있습니다.

이 기사의 예에서는 PHP가 리플렉션 메커니즘을 기반으로 플러그인의 플러그형 디자인을 구현하는 방법을 설명합니다. 참고용으로 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.

PHP와 ASP가 동등하다고 말하는 친구들은 여기에서 멈출 수 있습니다. PHP는 리플렉션을 지원하며 여전히 매우 강력합니다. 자, 오늘의 주제를 시작하겠습니다.

기능 설명:

이 페이지에는 여러 기본 연결이 있는 기본 탐색 메뉴가 있습니다.
플러그인은 통합된 디렉토리에 저장됩니다. 플러그인이 로드되면 필수 링크가 탐색 메뉴에 자동으로 추가됩니다.
플러그인은 로드 시 특정 작업을 수행할 수 있습니다.
코드 변경 없이 플러그인을 동적으로 추가 및 삭제할 수 있습니다.

최종 효과:

홈 페이지, 플러그인 1, 플러그인 2

"홈 페이지"는 시스템과 함께 제공되는 메뉴 항목입니다. "Plugin1"과 "Plugin2"는 플러그인에 등록된 메뉴 항목입니다.

구현 과정:

1. 파일 구조

Learn
plugin
plugin1.php
plugin2.php
test.php

이 디자인 이후 페이지 입구는 test.php이고 플러그인은 플러그인 디렉토리에 저장되며, 플러그인 디렉토리를 탐색하면 모든 플러그인을 찾을 수 있습니다.

2. 디자인 플러그인 인터페이스

interface IPlugin{
static function getname();
static function init();
static function getMenu();
}

3. 플러그인 내부 구현 인터페이스

Plugin1 구현 인터페이스:

<?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 구현 인터페이스:

<?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. 메인페이지 초기화 메인 탐색 메뉴

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

5. 플러그인 디렉토리를 탐색하고 모든 플러그인을 로드합니다.

$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. IPlugin 인터페이스를 구현하는 플러그인을 필터링하고 플러그인 주입 작업을 수행합니다.

// 反射执行方法(注入菜单)
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. 메인 페이지 출력 메뉴 HTML

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

6번째 부분은 PHP의 리플렉션 작업인데, 아주 간단하죠? 코드를 분석해 보면 전체 반영 작업 타이밍에는 코드 2줄만 있습니다!

$refClass = new ReflectionClass($class);
$menuItem = $refClass->getMethod(&#39;getMenu&#39;)->invoke(null);

자, 리플렉션의 기본 기능을 소개하는 것은 여기까지입니다. 물론, PHP의 리플렉션 기능은 그 이상입니다. 관심이 있다면 직접 살펴보세요.

위 내용은 PHP 반사 메커니즘 구현 플러그인의 설계 예에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.