2010-12-07 135 views
6

我想知道什麼是處理PHP應用程序鉤子的最佳方法
- 因此我可以在不修改代碼主體的情況下插入自定義或「插入」功能。執行PHP掛鉤的最佳方法

我知道WordPress的功能是這樣的。 難道真的沒事做一些事情如下:

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

print 'hello'; 

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

需要更多關於你所期望的`hook`的信息嗎?上面的**邏輯**完美地工作 – ajreal 2010-12-07 17:40:59

+8

該代碼並不完美,他錯過了兩個右括號 – Ashley 2010-12-07 17:43:10

回答

17

我怎麼通常做的事情,當涉及到掛鉤是創建一個HookLoader類,它將存儲兩種類型的掛鉤,PRE和POST。因爲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 

這將允許你創建無限量的鉤子。

最好我會做鉤子類,抽象的,靜態的,這個你可以只運行實際對象中的鉤通話,因此增加新的圖書館將被整合,只要他們有Hook::run("type","event");

5

爲什麼不使用「Observer Pattern 「 爲了這?您可以將一個對象添加到您的身體並觸發附屬分類所持有的動作。如果您想完善它,您可以在定義執行階段的每個Observer對象內創建一個特定的方法。這可能首先是更多的編程,但是提供了一個非常乾淨的界面,可以將更多的功能添加到您的類中。

對於一個具體的examample,這IBM dev article(順便說一句,它的值得閱讀作爲一個整體)應該給你一個這種模式的好印象。