我想知道在PHP应用程序中处理钩子的最佳方法是什么 - 所以我可以插入自定义或“插件”功能而无需修改代码主体。
我知道Wordpress的功能是这样的。 按照以下方式做某事真的很好:
if (file_exists('file_before'){ include('file_before'); }
print 'hello';
if (file_exists('file_after'){ include('file_after'); }
答案 0 :(得分:17)
我通常在钩子方面做的事情是创建一个HookLoader类,它将存储两种类型的钩子,PRE和POST。因为PHP是一个单线程解释器,所以没有DURING这样的东西。
举个例子:
$Hooks = new HookLoader();
$Hook->Run("PRE","database_connect");
$Database->Connect();
$Hook->Run("POST","database_connect");
hook目录中的每个钩子应该是这样的名称:
name_pre_database_connect.hook.php
Hook文件的格式如下:
{name}_{type}_{event}.hook.php
这将允许您创建无限量的挂钩。
最好我将钩子类抽象和静态,你可以在实际对象中运行钩子调用,因此只要他们有Hook::run("type","event");
答案 1 :(得分:5)
为什么不使用“Observer Pattern”呢?您可以将一个对象添加到您的身体并触发附加的分类所持有的动作。如果要对其进行优化,可以在每个Observer对象中创建一个定义执行阶段的特定方法。这可能最初会编程更多,但是提供了一个非常干净的界面,可以为您的类添加更多功能。
对于一个具体的例子,这个IBM dev article(顺便说一下它的整体价值)应该给你一个很好的印象。
答案 2 :(得分:0)
MediaWiki有自己的方法来定义方法中的钩子,以及注册要为给定执行点执行的函数的方法......
http://www.mediawiki.org/wiki/Hooks(可能是个好地方)