bayfrontmedia / php-hooks
一个易于使用的钩子库,用于管理事件和过滤器。
v2.0.0
2023-01-28 01:55 UTC
Requires
- php: ^8.0
- bayfrontmedia/php-array-helpers: ^2.0
This package is auto-updated.
Last update: 2024-08-28 05:40:54 UTC
README
一个易于使用的钩子库,用于管理事件和过滤器。
许可证
此项目是开源的,可在 MIT 许可证 下使用。
作者
要求
- 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');