PHPプラグインの仕組みの原理を徹底解説_PHPチュートリアル

WBOY
リリース: 2016-07-15 13:35:08
オリジナル
967 人が閲覧しました

この記事では、主にいくつかの

について説明します。プラグインとも呼ばれるプラグインは、特定のタイプの機能モジュールを指します (通常、サードパーティの開発者によって実装されます)。その特徴は次のとおりです。必要な場合は無効にし、不要な場合は削除します。有効にしても無効にしても、システムのコア モジュールの動作には影響しません。 -コアプログラムとプラグインの疎結合を実現する侵入型モジュラー設計。典型的な例は、ユーザー コメントのスパムをフィルタリングするために使用される Akimet プラグインなど、WordPress の多数のサードパーティ プラグインです。

堅牢な PHP プラグイン メカニズムには、次の特性が必要だと思います:

プラグインの動的な監視と読み込み (ルックアップ)

プラグインの動的なトリガー

上記 2 つの実装PHP プラグイン メカニズムのポイントは、コア プログラムの動作には影響しません

プログラムにプラグインを実装するには、最初に考えるべきことは、さまざまなフックを定義することです。「フック」は非常に鮮やかな論理概念です。であり、システムによって予約されているプラ​​グインのトリガー条件と考えることができます。その論理原理は次のとおりです。システムは特定のフックを実行するときに、フックの条件が満たされているかどうかを判断し、満たされている場合は、最初にフックで指定された関数を呼び出し、次に戻ってフックの実行を継続します。プログラムの残りの部分が満たされていない場合は、フックで指定された関数が最初に呼び出され、それをスキップします。これは、アセンブリの「割り込み保護」ロジックに似ています。

一部のフックはシステムによって事前に設計されている場合があります。たとえば、コメント スパム フィルタリングについて前述したフックは、通常、コア システム開発者によってコメント処理ロジックに設計されています。別の種類のフックはユーザーによってカスタマイズされる場合があります。 (サードパーティ開発者によって策定された) は、通常、通常の PHP フォーム表示ページなどのプレゼンテーション層に存在します。

上の言葉は退屈で眠くなると思われるかもしれませんが、私が以下に書いたコードを理解するには、上記の PHP プラグイン メカニズムの原理を理解することが不可欠です。

以下は、PHP におけるプラグイン メカニズムのコア実装です。メカニズム全体のコアは、3 つの主要なブロックに分かれています。

プラグイン マネージャー クラス: これは、コアのコアです。これはアプリケーションのグローバルな Global オブジェクトです。これには 3 つの主な役割があります:

登録されているすべてのプラグインを監視し、これらのプラグイン オブジェクトをインスタンス化する責任があります。

すべてのプラグインの登録を担当します。

フック条件が満たされると、対応するオブジェクトメソッドがトリガーされます。

プラグイン機能の実装: これは主にサードパーティの開発者によって行われますが、このルールはプラグインのメカニズムによって規定されており、プラグインのメカニズムによって異なります。以下の表示コードのルール。

プラグインのトリガー: つまり、フックのトリガー条件。具体的には、これは、このフックをトリガーするプラグイン実装が必要な場所に配置される小さなコードです。

PHP プラグイン メカニズムの原理についてはよく話されていますが、私の実装計画を見てみましょう:

Plugin Manager PluginManager クラス:

以下は PHP プラグインによって引用された内容です。メカニズム:

  1. < ?
  2. クラス PluginManager
  3. {
  4. private $ _listeners = 配列();
  5. public function __construct()
  6. {
  7. #ここで、$plugin 配列には、ユーザーによってアクティブ化された、取得したプラグイン情報が含まれています
  8. #デモンストレーションの便宜上、 $plugin には少なくとも
  9. #$plugin = array(
  10. # 'name' = ) が含まれていると仮定します。 > 'プラグイン名',
  11. # 'ディレクトリ'=>'プラグインのインストールディレクトリ'
  12. #); プラグイン
  13. = get_active_plugins(); #この関数は自分で実装してください if($plugins)
    {
  14. foreach($plugins as $plugin)
  15. {//各プラグイン フォルダーには、プラグイン
  16. の特定の実装である php ファイルが 1 つ含まれているとします。 ].'/actions.php'))
  17. {
  18. include_once(STPATH .'plugins/'. $plugin['directory'].'/actions.php');
    $
  19. class= $ plugin ['name']。
  20. 新しい $class($this);
  21. }
  22. } }
  23. }ここにいくつかのログ記録があります
  24. }
  25. function register($hook, &$reference, $method)
  26. {
  27. //プラグインによって実装されるメソッドを取得します
  28. $
  29. key
  30. =
  31. get_class
  32. ($reference).'-
  33. >

  34. '.$method;
  35. // プラグイン参照とメソッドをリスニング配列にプッシュします
  36. $this-
  37. >_listeners[$hook][$key] = array(&$reference, $method) #ここでいくつかのログ記録を行います } 関数トリガー($hook, $data=
  38. ''
  39. ) { $ 結果
  40. =
  41. ''
  42. ;
  43. // 実装されるフックがリスニング配列内にあるかどうかを確認します if (isset($this->_listeners[$フック]) && is_array($this-
  44. >
  45. _listeners[ $hook]) && count($this->_listeners[$hook]) > 0)
  46. {
  47. // ループ通話開始
  48. foreach ($this->_listeners[$hook] as $listener)
  49. {
  50. // プラグインオブジェクトの参照とメソッドを取り出します
  51. $ クラス =& $listener[0] $
  52. メソッド = $listener[1]; if(method_exists($class,$ Method) ) ) {
  53. // プラグインを動的に呼び出すメソッド
  54. $result
  55. .
  56. = $class-> $メソッド($data); } }
  57. #ここにいくつかのログが含まれています
  58. $result を返します。
  59. }
  60. }
  61. ?>
  62. 上記のコードとコメントは 100 行を超えてはならず、これでプラグイン メカニズム全体の中核が完成します。プラグインが必要な場合は、これをグローバル クラスとして設定し、最初にロードする必要があることに再度注意してください。 # でコメントされている箇所は、PHP プラグインの仕組みの取得やロギングなど、自分で行う必要がある部分です。 http://www.bkjia.com/PHPjc/445941.html
  63. www.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/445941.html

技術記事


この記事では主に、特定のタイプの機能モジュール (通常はサードパーティ開発者によって実装される) を指す、プラグインとも呼ばれるいくつかのプラグインについて説明します。その特徴は次のとおりです。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート