1 つ目はプラグイン管理クラスの実装です:
コードをコピーします コードは次のとおりです:
/**
* STBLOG PluginManager クラス
*
* プラグイン機構の実装コアクラス
*
* @package STBLOG
* @subpackage Libraries
* @category Libraries
* @author Saturn
* @link http://www .cnsaturn.com /
*/
class PluginManager
{
/ **
* 登録されたプラグインを監視します
*
* @access private
* @var array
*/
private $_listeners = array();
/**
* コンストラクター
*
* @access public
* @return void
*/
public function __construct()
{
#ここで、$plugin 配列には、取得したプラグイン情報が含まれています。ユーザーによってアクティブ化されています
#デモンストレーションの便宜上、$ プラグインには少なくとも
#$plugin = array(
# 'name' => 'プラグイン名',
# 'ディレクトリ' が含まれている必要があると仮定します=> 'プラグインのインストールディレクトリ'
#);
$plugins = get_active_plugins();# この関数は自分で実装してください
if($plugins)
{
foreach($plugins as $plugin)
{//各プラグイン フォルダーには、プラグイン
if (@ file_exists(STPATH .'plugins/'.$plugin['directory'].'/actions) の特定の実装である、actions.php ファイルが含まれているとします。 .php'))
{
include_once(STPATH .'plugins/'.$plugin['ディレクトリ'].'/actions.php ');
$class = $plugin['name'].'_actions' ;
if (class_exists($class))
{
//すべてのプラグインを初期化します
new $class($this);
}
}
}
#ここでいくつかのログ記録を行います
}
/* *
* 監視が必要なプラグインメソッド(フック)を登録します
*
* @param string $hook
* @param object $reference
* @param string $method
*/
function register($hook, &$reference, $method)
{
//プラグインが実装するメソッドを取得します
$key = get_class($reference).'->' .$method;
//プラグインリファレンスとメソッドをリスニング配列にプッシュします
$this->_listeners[$hook][$key] = array(&$reference, $method);ここにログを記録します
}
/**
* フックをトリガーします
*
* @param string $hook フックの名前
* @parammixed $data フックの入力パラメータ
* @returnmixed
*/
functiontrigger($hook, $data='')
{
$result = '';
//実装されるフックが listen にあるかどうかを確認します配列
if (isset($this->_listeners[$hook]) && is_array($this->_listeners[$hook]) && count($this->_listeners[$hook]) > 0)
{
// ループ呼び出しが開始されます
foreach ($this->_listeners[$hook] as $listener)
{
// プラグイン オブジェクトの参照とメソッドを取り出します
$class =& $listener[0] ;
$method = $listener[1];
if(method_exists($class,$method))
{
// プラグインメソッドを動的に呼び出す
$result .= $class->$method($data );
}
}
}
#ここでいくつかのログ記録を行います
return $result;
}
}
?>
具体的な実装方法:
コードは次のとおりです:
/**
* これは Hello World シンプルなプラグインの実装です
*
* @package DEMO
* @subpackage DEMO
* @category Plugins
* @author Saturn
* @link http://www.cnsaturn.com/
*/
/**
*注意すべきデフォルトのルールがいくつかあります:
* 1. このプラグイン クラスのファイル名は action である必要があります
* 2. プラグイン クラスの名前は {plugin name_actions} である必要があります
*/
class DEMO_actions
{
//分析関数 パラメータは pluginManager
function への参照です__construct(&$pluginManager)
{
//このプラグインを登録します
//最初のパラメータはフックの名前です
//2番目のパラメータはpluginManagerへの参照です
//3番目は実行されるメソッドですプラグイン
$pluginManager->register('demo', $this, 'say_hello');
function Say_hello()
{
echo 'Hello World'
}
?> ;
;
例えば、私のブログのトップページ、Index.phpにsay_helloを置きたい場合、index.phpのどこかに次のように書きます: (作者の原文)
コードをコピー
コードは次のとおりです。 :
$pluginManager->trigger('demo','');
以上でプラグイン機構の実装は終わりです。
http://www.bkjia.com/PHPjc/320869.html
www.bkjia.com
truehttp://www.bkjia.com/PHPjc/320869.html技術記事 1 つ目は、プラグイン管理クラスの実装です。次のようにコードをコピーします。 ? /** * STBLOG PluginManager Class * * プラグイン メカニズム実装のコア クラス * * @package STBLOG * @subpackage ライブラリ。 ..