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 を動的に呼び出します:
コード
コードは次のとおりです:
/**
* これは Hello World シンプルなプラグインの実装です
* @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','');
以上でプラグイン機構の実装は終了です。
上記では、sumproduct 関数の使用方法と、sumproduct 関数の使用を含む、PHP での Web サイト プラグイン メカニズムの実装方法を紹介しました。PHP チュートリアルに興味のある友人に役立つことを願っています。