첫 번째는 플러그인 관리 클래스 구현입니다.
코드 복사 코드는 다음과 같습니다.
< ?
/**
* STBLOG PluginManager 클래스
*
* 플러그인 메커니즘의 구현 핵심 클래스
*
* @package STBLOG
* @subpackage 라이브러리
* @category 라이브러리
* @작가 새턴
* @link http://www.cnsaturn.com/
*/
class PluginManager
{
/**
* 등록된 플러그인 듣기
*
* @access private
* @var array
*/
private $_listeners = array()
/**
* 생성자
*
* @access public
* @return void
*/
공개 함수 __construct()
{
#여기서 $plugin 배열에는 사용자가 활성화한 플러그인 정보가 포함되어 있습니다
#시연의 편의를 위해, $plugin에는 최소한
#$plugin = array (
# 'name' => '플러그인 이름',
# 'directory' => '플러그인 설치 디렉토리가 포함되어 있다고 가정합니다. '
#);
$plugins = get_active_plugins();#이 함수는 직접 구현해 보세요.
if($plugins)
{
foreach($plugins as $plugin)
{//각 플러그인 폴더에 플러그인의 특정 구현인 actions.php 파일이 포함되어 있다고 가정합니다
if (@file_exists(STPATH .'plugins/'.$plugin['directory']. '/actions.php'))
{
include_once(STPATH .'plugins/'.$ 플러그인['directory'].'/actions.php')
$class = $plugin ['name'].'_actions';
if (class_exists($class))
{
//모든 플러그인 초기화
new $class($this)
}
}
}
}
#여기서 로깅 작업을 수행하세요
}
/**
* 모니터링해야 할 플러그인 메소드(hook) 등록
*
* @param string $hook
* @param object $reference
* @param string $method
*/
함수 레지스터($hook, &$reference, $ method)
{
//플러그인에서 구현할 메소드 가져오기
$key = get_class( $reference).'->'.$method
//Push 플러그인 참조 및 메소드를 청취 배열에 추가
$this->_listeners[$hook][$key] = array(& $reference, $method)
#여기서 로깅 작업 수행
}
/**
* 후크 트리거
*
* @param string $hook 후크 이름
* @param Mixed $data 후크의 입력 매개변수
* @return Mixed
*/
function Trigger($hook, $data='')
{
$result = ''
//훅 여부 확인 구현될 것은 청취 배열에 있습니다
if (isset($this->_listeners[$hook]) && is_array ($this->_listeners[$hook]) && count($this->_listeners[ $hook]) > 0)
{
// 루프 호출 시작
foreach ($this- >_listeners[$hook] as $listener)
{
// Get 플러그인 객체의 참조 및 메소드
$class =& $listener[0];
$method = $listener[1 ]
if(method_exists($class,$method))
{
// 플러그인 메소드를 동적으로 호출
$result .= $class->$method($data)
}
}
# 여기서 로깅 작업을 수행하세요
return $result;
}
}
?>
코드 복사 코드는 다음과 같습니다.
/**
* Hello World 단순 플러그인의 구현입니다.
*
* @package DEMO
* @subpackage DEMO
* @category 플러그인
* @author Saturn
* @링크 http://www.cnsaturn.com/
*/
/ **
* 참고해야 할 몇 가지 기본 규칙:
* 1. 이 플러그인 클래스의 파일 이름은 action
*이어야 합니다. 2. 플러그인 클래스의 이름은 {plugin name_actions} <🎜여야 합니다. >*/
class DEMO_actions
{
//파싱 함수의 매개변수는pluginManager
function __construct(&$pluginManager )
{
/에 대한 참조입니다. /이 플러그인 등록
//첫 번째 매개변수는 후크 이름
//두 번째 매개변수는pluginManager에 대한 참조
//세 번째 매개변수는 플러그인 이름입니다. 메소드
$pluginManager->register('demo', $this, 'say_hello')
}
function say_hello()
{
echo 'Hello World'
}
}
?>
예를 들어 내 블로그의 홈 페이지인 Index.php에 say_hello를 추가하려면 index.php의 어딘가에 다음을 작성합니다. (저자 원문)
코드 복사 코드는 다음과 같습니다.
$pluginManager->trigger('demo' ,'' );
위는 플러그인 메커니즘의 구현입니다. 이상입니다!