Bol*_*ock 35
您可能找不到任何东西,因为PHP首先没有钩子的概念.
挂钩是一种可以插入(或挂钩)到现有系统以扩展其功能的功能.它们不是特定于PHP语言或任何系统.它们也可以称为插件,附加组件或扩展.
现在,虽然PHP没有钩子的概念,但它确实允许您与PHP核心一起编译扩展,以获得在脚本中使用的附加功能.默认情况下捆绑了大量PHP扩展.这是我上面描述的一个例子.
您可以在自己的 PHP 项目中模拟钩子:
1)创建并包含下一个类:
class Hooks {
private static $actions = array(
'ev_after_user_create' => array(),
'ev_after_user_profile_update' => array()
);
public static function apply($hook, $args = array()) {
if (!empty(self::$actions[$hook])) {
foreach (self::$actions[$hook] as $f) {
$f($args);
}
}
}
public static function add_action($hook, $function) {
self::$actions[$hook][] = $function;
}
}
Run Code Online (Sandbox Code Playgroud)
定义您喜欢的钩子名称。
2)现在您可以在代码中使用钩子,例如在创建新用户后执行 smth(示例):
//here is going any code which creates new user
//hooks
Hooks::apply('ev_after_user_create', array('user_id' => $new_user_id));
Run Code Online (Sandbox Code Playgroud)
3)以下一种方式定义钩子动作:
Hooks::add_action('ev_after_user_create', function($args) {
if (Router::$application === 'front') {
require_model('users-data');
$ud = new MUsersData(8);
$ud->update_data($ud->create_page(), $args, 'id');
}
});
Run Code Online (Sandbox Code Playgroud)
任何钩子动作代码都应该在需要其动作的代码之前定义!