我想知道什麼是處理PHP應用程序鉤子的最佳方法
- 因此我可以在不修改代碼主體的情況下插入自定義或「插入」功能。執行PHP掛鉤的最佳方法
我知道WordPress的功能是這樣的。 難道真的沒事做一些事情如下:
if (file_exists('file_before'){ include('file_before'); }
print 'hello';
if (file_exists('file_after'){ include('file_after'); }
我想知道什麼是處理PHP應用程序鉤子的最佳方法
- 因此我可以在不修改代碼主體的情況下插入自定義或「插入」功能。執行PHP掛鉤的最佳方法
我知道WordPress的功能是這樣的。 難道真的沒事做一些事情如下:
if (file_exists('file_before'){ include('file_before'); }
print 'hello';
if (file_exists('file_after'){ include('file_after'); }
我怎麼通常做的事情,當涉及到掛鉤是創建一個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");
鏈接到MediaWiki都有自己在他們的方法定義掛鉤的機制,登記職能的方式來執行給定的點被執行...
http://www.mediawiki.org/wiki/Hooks(可能是一個很好的開始)
爲什麼不使用「Observer Pattern 「 爲了這?您可以將一個對象添加到您的身體並觸發附屬分類所持有的動作。如果您想完善它,您可以在定義執行階段的每個Observer對象內創建一個特定的方法。這可能首先是更多的編程,但是提供了一個非常乾淨的界面,可以將更多的功能添加到您的類中。
對於一個具體的examample,這IBM dev article(順便說一句,它的值得閱讀作爲一個整體)應該給你一個這種模式的好印象。
需要更多關於你所期望的`hook`的信息嗎?上面的**邏輯**完美地工作 – ajreal 2010-12-07 17:40:59
該代碼並不完美,他錯過了兩個右括號 – Ashley 2010-12-07 17:43:10