magdicom / hooks
一个轻量级的PHP动作钩子包。
Requires
- php: ^8.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.0
- pestphp/pest: ^1.20
- spatie/ray: ^1.28
This package is auto-updated.
Last update: 2024-09-09 17:38:09 UTC
README
受WordPress启发,动作钩子是你在代码的特定位置定义的函数,它通过将大代码块分割成单独的文件和/或类,帮助你保持代码的有序性。
安装
您可以通过composer安装此包
composer require magdicom/hooks
使用
快速入门
use Magdicom\Hooks; $hooks = new Hooks(); # Register our functions $hooks->register("Greetings", function($vars){ return "Hi There,"; }, 1); $hooks->register("Greetings", function($vars){ return "This is the second line of greetings!"; }, 2); # Later we run it echo $hooks->all("Greetings")->toString("<br>");
上面的示例将输出
Hi There,
This is the second line of greetings!
输出
当你调用任何 all
、first
或 last
方法时,相应的钩子函数将被执行,它们的输出将被保存到特殊属性中,稍后可以使用 toString
或 toArray
方法导出。
回调函数
闭包
$hooks->register("Callback", function($vars) { return "Closure"; });
函数名
function simple_function_name($vars){ // } $hooks->register("Callback", "simple_function_name");
对象方法
class FooBar { public function methodName($vars){ // } } $object = new FooBar; $hooks->register("Callback", [$object, 'methodName']);
或
$hooks->register("Callback", [(new FooBar), 'methodName']);
静态方法
class FooBar { public static function staticMethodName($vars){ // } } $hooks->register("Callback", ['FooBar', 'staticMethodName']);
如果这不是静态方法,将创建一个对象,并调用提供的方法。
参数
每次执行钩子回调函数时,可以传递一个参数数组给它,以帮助它执行所需的操作。
全局参数
可以使用 setParameter
和 setParameters
方法定义全局参数,并且这些参数将在所有钩子点和回调函数中可用。
范围参数
全局参数的反义词,范围参数仅在指定的动作钩子点上可用,并且可以作为 all
、first
和 last
方法的第二个参数提供。
当您将其作为数组提供时,范围参数的值将临时替换(类似键条目)全局参数,并作为合并后的数组传递给 register
方法的回调。
当提供的参数是类对象时,它可以从 register
方法作为第一个参数访问,全局参数可以通过第二个参数访问。
class FooBarBaz { public $id; public function __construct(int $id){ $this->id = $id; } } $hooks = new Hooks(); $hooks->setParameters([ "name" => "Bar", ]); $hooks->register("ParameterAsObject", function ($fooBarBaz, $params) { return [$fooBarBaz->id, $params['name']]; }); echo $hooks->all("ParameterAsObject", (new FooBarBaz(100))->toString("\n"); // Output will be 100 Bar
优先级
当您需要确保某些钩子函数应该按顺序执行时,这里就出现了 $priority
,这是 register
方法的第三个和最后一个参数。
方法
__construct
$hooks = new Hooks(?array $parameters);
类构造方法可以可选地接受一个键值对数组。
register
$hooks->register(string $hookName, array|callable $callback, ?int $priority): self
通过此方法注册您所有的钩子函数
$hookName
这可以是您想要的任何东西,它就像一个分组名称,所有其他相关的动作钩子函数都将附加到它。$callback
只接受 callable 函数。$priority
(可选)用于在执行之前对回调函数进行排序。
all
$hooks->all(string $hookName, array|object|null $parameters): self
将执行指定钩子名称的所有回调函数,默认情况下将返回输出字符串,有关更多选项,请检查输出部分。
$hookName
你想要执行的钩子名称。$parameters
可选的键值对数组(或对象),你希望为同一钩子点的所有相关回调函数提供。
请注意:通过此方法提供的参数仅可在指定钩子点的范围内使用,要指定全局参数,请使用setParameter
、setParameters
方法。
first
$hooks->first(string $hookName, array|object|null $parameters): self
除了仅执行排序后的第一个回调(之后)之外,在各个方面都与all
方法类似。
last
$hooks->last(string $hookName, array|object|null $parameters): self
除了仅执行排序后的最后一个回调(之后)之外,在各个方面都与all
方法类似。
toArray
$hooks->toArray(): array
将返回最后执行的钩子名称函数的输出数组。
toString
$hooks->toString(?string $separator): string
将返回最后执行的钩子名称函数的输出字符串。
$separator
可以用来按需分隔输出(例如:"\n","<br>")。
setParameter
$hooks->setParameter(string $name, mixed $value): self
使用此方法定义一个可以从任何钩子函数访问的参数。
$name
参数名称。$value
参数值可以是字符串、数组甚至是对象。
备注:如果参数已经定义,则其旧值将被此处提供的值替换。
setParameters
$hooks->setParameters(array $parameters): self
与setParameter
相同,但此处它接受一个名称、值对数组作为其唯一参数。
setSourceFile
$hooks->setSourceFile(?string $path): self
与debug
方法一起使用。
debug
$hooks->debug(callable|null $callback): self
要启用调试功能,你需要通过提供一个回调函数来调用此方法,此函数应接受一个参数,该参数将是调试信息/消息。
$hooks->debug(function($message){ // Will print debug message(s) echo $message . PHP_EOL; }); $hooks->setSourceFile("/path/to/file/filename.php"); $hooks->register("Greetings", "FooBar::log"); $hooks->all("Greetings");
将输出
+ Added Source File: /path/to/file/filename.php
+ Hook Point: Greetings, New Callback Defined:
-- Source: /path/to/file/filename.php
-- Callback: FooBar::log
-- Priority: 1
+ Hook Point: Greetings, Callback Functions Sorted!
+ Hook Point: Greetings, Output Generated For All Callback Functions!
测试
composer test
变更日志
有关最近更改的更多信息,请参阅变更日志。
贡献
有关详细信息,请参阅贡献。
致谢
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。