2010-12-07 17 views
6

PHPアプリケーションでフックを処理する最良の方法は何ですか?
- コードの本体を変更せずにカスタムまたは 'プラグイン'機能を挿入できます。PHPフックを実行する最良の方法

私はWordpressの機能をこのように知っています。 は、次のように何かをすることは本当に大丈夫です:

if (file_exists('file_before'){ include('file_before'); } 

print 'hello'; 

if (file_exists('file_after'){ include('file_after'); } 
+2

あなたが期待している「フック」の詳細情報が必要ですか?上記の**ロジック**は完全に動作します – ajreal

+8

そのコードは完全には機能しません。彼は2つの閉じ括弧がありません – Ashley

+1

何をしようとしているのかを擬似コードで伝えました – CJD

答えて

17

どのように私は通常、フックになると、2つのタイプのフックPREとPOSTを格納するHookLoaderクラスを作成します。 PHPのように、単一スレッドのインタプリタであると、DURINGのようなものはありません。フックディレクトリ内の各フックがそうのような名前にする必要があり

$Hooks = new HookLoader(); 

$Hook->Run("PRE","database_connect"); 
$Database->Connect(); 
$Hook->Run("POST","database_connect"); 

name_pre_database_connect.hook.php 

フックファイルがそうのようにフォーマットされます:

{name}_{type}_{event}.hook.php 

これを

この例を見てみましょうフックを無制限に作成することができます。

好ましく私は、これはあなたがちょうど彼らがなぜ「Observer Patternを使用しないHook::run("type","event");

+0

良い解決策 – CJD

+0

あなたの歓迎、すべてがうまくいくことを願っています。 – RobertPitt

0

MediaWikiはそのメソッドにフックを定義する独自の機構を有し、かつ登録機能の方法は、実行の特定のポイントのために実行されるように...

http://www.mediawiki.org/wiki/Hooks

5

を持っているように新しいライブラリを追加する限り統合されるので、実際のオブジェクト内のフックの呼び出しを実行することができ、フッククラスは抽象的で静的になるだろう" このため?あなたの体にオブジェクトを追加して、添付されたクラスが保持するアクションをトリガすることができます。それを洗練したい場合は、実行の段階を定義する各Observerオブジェクト内に特定のメソッドを作成できます。これは最初はプログラミングの方が多いでしょうが、より多くの機能をクラスに追加するためのきれいなインターフェースを提供します。

具体的な例として、このIBM dev article(btwは全体として読む価値があります)は、このパターンの素晴らしい印象を与えるはずです。

関連する問題