做PHP钩子的最佳方法

CJD*_*CJD 6 php hook

我想知道,最好的办法是在一个PHP应用程序处理挂钩什么
-这样我就可以"插件"功能,插入自定义或不修改代码的主体.

我知道Wordpress的功能是这样的.做以下事情真的没问题:

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

print 'hello';

if (file_exists('file_after'){ include('file_after'); }
Run Code Online (Sandbox Code Playgroud)

Rob*_*itt 17

我通常在挂钩时做的事情是创建一个HookLoader类,它将存储两种类型的挂钩,PRE和POST.因为PHP是单线程解释器,所以没有DURING这样的东西.

举个例子:

$Hooks = new HookLoader();

$Hook->Run("PRE","database_connect");
$Database->Connect();
$Hook->Run("POST","database_connect");
Run Code Online (Sandbox Code Playgroud)

钩子目录中的每个钩子应该是这样的名称:

name_pre_database_connect.hook.php
Run Code Online (Sandbox Code Playgroud)

钩子文件的格式如下:

{name}_{type}_{event}.hook.php
Run Code Online (Sandbox Code Playgroud)

这将允许您创建无限量的钩子.

最好我会使钩子类抽象和静态,你可以在实际对象中运行钩子调用,因此只要他们有新的库就可以集成 Hook::run("type","event");


DrC*_*sos 5

为什么不使用" 观察者模式 "呢?您可以将一个对象添加到您的身体并触发附加的分类所持有的动作.如果要对其进行优化,可以在每个Observer对象中创建一个定义执行阶段的特定方法.这可能最初会编程更多,但是提供了一个非常干净的界面,可以为您的类添加更多功能.

对于一个具体的例子,这篇IBM开发文章(顺便说一句,它的整体值得阅读)应该给你一个很好的印象.