什么是PHP的钩子?

tas*_*ha- 17 php hook

我试图在Google上搜索,但找不到任何好的教程或文章.

Bol*_*ock 35

您可能找不到任何东西,因为PHP首先没有钩子的概念.

挂钩是一种可以插入(或挂钩)到现有系统以扩展其功能的功能.它们不是特定于PHP语言或任何系统.它们也可以称为插件,附加组件或扩展.

现在,虽然PHP没有钩子的概念,但它确实允许您与PHP核心一起编译扩展,以获得在脚本中使用的附加功能.默认情况下捆绑了大量PHP扩展.这是我上面描述的一个例子.


Att*_*cus 8

是的,钩子不是本机PHP方法..它们用于从框架的核心扩展功能.

Codeigniter Hooks


rea*_*777 5

您可以在自己的 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)

任何钩子动作代码都应该在需要其动作的代码之前定义