gburtini/hooks

钩子、插件、过滤器、事件驱动编程、插件架构,全部在一个干净、易用的接口中。

0.1.5 2015-04-10 04:42 UTC

This package is auto-updated.

Last update: 2024-09-05 03:06:26 UTC


README

事件驱动编程、插件架构、钩子、过滤器,全部封装在一个简单、高效、干净的Composer接口中。

这是一种优雅的编码插件架构或其他解耦软件解决方案的方法。该类提供三种主要方法:绑定、运行和过滤;结合使用,您可以将它们集成到现有系统中,而不会干扰其现有代码。

Plugins.php 中还有一个插件加载器,可以用来加载一个可选代码目录。使用很简单:Plugins::load("directory") 将遍历目录,并加载所有包含 init.php 文件的非禁用 (~, . 前缀) 文件夹。

安装

您需要的所有内容都包含在单个文件 Hooks.php 中,但最方便的安装方式是使用 composer

composer require gburtini/hooks

用法

  • bind(string $hook, callback $callback, int $priority) - 将回调绑定到钩子
  • run(string $hook, array $parameters) - 执行绑定到给定钩子的所有函数
  • filter(string $hook, object $value, array $parameters) - 执行绑定到给定钩子的所有函数,每次传递 $value,最后返回值

设计的用例是在您的现有软件中,您将调用 Hooks::filterHooks::run,在您想要允许用户使用指定的 $hook 值进行钩子操作的地方。然后用户可以在您的代码运行之前随时调用 Hooks::bind() 来将代码与各种位置关联起来--过滤器将返回值(以便函数可以更改它)和运行调用将简单地运行函数,而不会在代码中产生副作用。

调试

Hooks 类有一个调试级别设置,可以产生一些输出,指示哪些钩子在何时运行。在运行时调用 Hooks::setDebugLevel($debug_level) 来设置调试输出。 $debug_level 可以取以下值

  • Hooks::DEBUG_NONE - 默认值,没有调试输出。
  • Hooks::DEBUG_EVENTS - 发生时的 ::run::filter 调用列表。
  • Hooks::DEBUG_CALLS - 每个钩子/过滤器中执行的每个回调列表。
  • Hooks::DEBUG_BINDS - 为钩子或过滤器设置绑定的时间列表。
  • Hooks::DEBUG_INTERACTION - 输出对类方法的每个调用(绑定、运行、过滤和私有方法)
  • Hooks::DEBUG_ALL - 以上所有内容的组合。

您也可以使用按位或将这些组合起来,例如 Hooks::DEBUG_EVENTS | Hooks::DEBUG_BINDS 将输出所有运行/过滤/绑定的调用。

未来工作

一个不错的未来特性是强制执行对这些绑定可以做什么的一些约束--允许“不受信任”(在数据意义上)的代码在某些类似沙盒中运行;例如,过滤器可以检查以确保值被限制在特定类型、范围或回调验证。

对调试代码进行计时,以查看哪些钩子和相关回调运行缓慢,这也是一个有趣的角度。

排序可以更频繁地调用。如果没有变化,则不需要再次调用排序函数。话虽如此,所使用的快速排序变体应该对已排序的数据运行得很快。

许可

版权 (C) 2012-2015 Giuseppe Burtini

本程序是自由软件:您可以按照自由软件基金会发布的 GNU 通用公共许可证的条款重新分配和/或修改它,许可证版本为 2,或(根据您的选择)任何更高版本。

本程序以供使用为目的进行分发,但不提供任何保证;甚至不保证其可销售性或适用于特定目的。有关详细信息,请参阅GNU通用公共许可证。

您应该已随本程序一起收到GNU通用公共许可证的副本。如果没有,请参阅https://gnu.ac.cn/licenses/