bayfrontmedia / php-hooks

一个易于使用的钩子库,用于管理事件和过滤器。

v2.0.0 2023-01-28 01:55 UTC

This package is auto-updated.

Last update: 2024-08-28 05:40:54 UTC


README

一个易于使用的钩子库,用于管理事件和过滤器。

许可证

此项目是开源的,可在 MIT 许可证 下使用。

作者

Bayfront Media

要求

  • PHP ^8.0

安装

composer require bayfrontmedia/php-hooks

使用

开始使用钩子

use Bayfront\Hooks\Hooks;

$hooks = new Hooks();

公共方法

事件

过滤器

addEvent

描述

为给定的事件名添加钩子。

注意:匿名函数无法使用 removeEvent() 移除,因此请谨慎使用。

参数

  • $name (string): 事件名称
  • $function (callable)
  • $priority = 10 (int): 钩子将按优先级顺序执行(数字越小,执行越早)

保留名称

  • always: 这些钩子将在每次调用 doEvent() 时始终执行,无论名称如何。
  • destruct: 这些钩子将在脚本结束时执行。

返回值

  • (void)

示例

匿名函数

$hooks->addEvent('name', function($name) {

    echo 'My name is ' . $name;

});

命名函数

function my_name($name) {

    echo 'My name is ' . $name;

}

$hooks->addEvent('name', 'my_name');

类作用域内

use Bayfront\Hooks\Hooks;

class MyClass {

    protected $hooks;

    public function __construct(Hooks $hooks) {

        $this->hooks = $hooks;

        $this->hooks->addEvent('name', [$this, 'my_name']);

    }

    public function my_name($name) {

        echo 'My name is ' . $name;

    }
}

$my_class = new MyClass($hooks);

使用外部作用域的变量

$prefix = 'My name is ';

$hooks->addEvent('name', function($name) use ($prefix) {

    echo $prefix . $name;

});

hasEvent

描述

检查是否存在给定名称的事件。

参数

  • $name (string): 事件名称

返回值

  • (bool)

示例

if ($hooks->hasEvent('name')) {
    // Do something
}

getEvents

描述

返回所有事件的钩子数组,或给定事件名的钩子数组。

参数

  • $name = NULL (string|null): 事件名称

返回值

  • (array)

示例

print_r($hooks->getEvents()); // Returns all hooks for all events

print_r($hooks->getEvents('name')); // Returns all hooks for "name" event

removeEvent

描述

如果存在,则从给定事件中移除钩子。

注意:使用匿名函数的钩子无法使用此方法移除。

参数

  • $name (string): 事件名称
  • $function (callable): 要移除的钩子

返回值

  • (bool): 如果钩子存在,则返回 true

示例

$hooks->removeEvent('name', 'my_name');

要从类作用域内部移除函数的钩子,$function 参数必须是一个数组,其第一个值是类的实例,第二个值是类内的函数名称

$hooks->removeEvent('name', [$my_class, 'my_name']);

removeEvents

描述

如果存在,则从给定事件中移除所有钩子。

参数

  • $name (string): 事件名称

返回值

  • (bool): 如果钩子存在,则返回 true

示例

$hooks->removeEvents('name');

doEvent

描述

按优先级顺序执行给定事件的队列钩子。

参数

  • $name (string): 事件名称
  • ...$arg (mixed): 可选的附加参数,传递给绑定到事件的函数

返回值

  • (void)

示例

$hooks->doEvent('name', 'John');

addFilter

描述

为给定的过滤器名称添加钩子。

参数

  • $name (string): 过滤器名称
  • $function (callable)
  • $priority = 10 (int): 过滤器将按优先级顺序执行(数字越小,执行越早)

返回值

  • (void)

示例

匿名函数

$hooks->addFilter('name', function($name) {

    return strtoupper($name);

});

命名函数

function uppercase($name) {

    return strtoupper($name);

}

$hooks->addFilter('name', 'uppercase');

类作用域内

use Bayfront\Hooks\Hooks;

class MyClass {

    protected $hooks;

    public function __construct(Hooks $hooks) {

        $this->hooks = $hooks;

        $this->hooks->addFilter('name', [$this, 'uppercase']);

    }

    public function uppercase($name) {

        return strtoupper($name);

    }
}

$my_class = new MyClass($hooks);

使用外部作用域的变量

$prefix = 'My name is ';

$hooks->addFilter('name', function($name) use ($prefix) {

    return strtoupper($prefix . $name);

});

hasFilter

描述

检查是否存在给定名称的过滤器。

参数

  • $name (string): 过滤器名称

返回值

  • (bool)

示例

if ($hooks->hasFilter('name')) {
    // Do something
}

getFilters

描述

返回所有过滤器的钩子数组,或给定过滤器名称的钩子数组。

参数

  • $name = NULL (string|null): 过滤器名称

返回值

  • (array)

示例

print_r($hooks->getFilters()); // Returns all hooks for all filters

print_r($hooks->getFilters('name')); // Returns all hooks for "name" filter

removeFilter

描述

如果存在,则从给定过滤器中移除钩子。

注意:使用匿名函数的钩子无法使用此方法移除

参数

  • $name (string): 过滤器名称
  • $function (callable): 要移除的钩子

返回值

  • (bool): 如果钩子存在,则返回 true

示例

$hooks->removeFilter('name', 'uppercase');

要从类作用域内部移除函数的钩子,$function 参数必须是一个数组,其第一个值是类的实例,第二个值是类内的函数名称

$hooks->removeFilter('name', [$my_class, 'uppercase']);

removeFilters

描述

如果存在,则从给定过滤器中移除所有钩子。

参数

  • $name (string): 过滤器名称

返回值

  • (bool): 如果钩子存在,则返回 true

示例

$hooks->removeFilters('name');

doFilter

描述

按优先级顺序通过队列过滤器过滤值。

参数

  • $name (string): 过滤器名称
  • $value (mixed): 要过滤的原始值

返回值

  • (mixed): 过滤后的值

示例

echo $hooks->doFilter('name', 'John');