Hooks是一个小型库,提供了可挂钩的操作和过滤器,类似于WordPress。这可以在任何PHP 8.0+项目中使用。

1.0.3 2024-03-07 04:50 UTC

This package is auto-updated.

Last update: 2024-09-07 05:46:17 UTC


README

Hooks是一个小型库,提供了可挂钩的操作和过滤器,类似于WordPress。这可以在任何PHP 7.4+项目中使用,并且是向插件代码公开可挂钩的操作和过滤器,以在应用程序中实现插件功能的一种简单方式。

Hook类提供了一个简单接口,用于注册在特定钩子名称下调用的函数,按优先级排序。然后可以执行钩子函数列表,可选地传递参数,或用作初始值的累加器。

虽然Hook类本身可以用于创建、注册和执行钩子,但您也可以使用全局的hook_*函数来简化这些操作。

菜单示例

菜单可能包括一个默认项目列表,然后此列表可以通过过滤器钩子传递,允许插件修改或向列表中添加内容。

应用程序使用

$menu = [
    'Plugins' => [
        new MenuItem('Plugin Manager', '/plugins/index')
    ]
];
$menuItems = hook_filter('main_menu', $menu);

// Add menu items to UI...

插件使用

然后插件可以通过将回调添加到相同的钩子来接收列表并添加自己的项目来修改该列表。

hook_add('main_menu', function(array $menu)
{
    $menu['Plugins'][] = new MenuItem('My Plugin', '/my-plugin/');
    return $menu;
});

使用钩子执行操作

要创建、将函数添加到钩子并执行它,可以使用以下替代方法

$hook = \YetAnother\Hook::get('do_stuff');
$hook->add(function($param)
{
    print($param);
});
$hook->run('Hello, world!');

// "Hello, world!" is printed
hook_add('do_stuff', fn($param) => print($param));
hook_run('do_stuff', 'Hello, world!');

使用钩子进行过滤

通过在用作过滤器的钩子上注册回调,您可以使用输入并将结果传递给过滤器中的下一个函数。

hook_add('accumulate', fn($initial, $parameter) => $initial + $parameter);
hook_add('accumulate', fn($initial, $parameter) => $initial * $parameter);

$result = hook_filter('accumulate', 5, 7);

// $result = 54 ((5 + 7) * 7)
hook_add('menu', function(array $menu)
{
    $menu[] = 'World';
    return $menu;
});

$menu = hook_filter('menu', [ 'Hello' ]);

// $menu = [ 'Hello', 'World' ]