php-hooks 库的 `apply_filters()` 默认仅返回最后一个回调的执行结果;若需收集所有已注册同名钩子的返回值,必须手动遍历调用或改用支持“过滤器链聚合”的设计模式。
在 PHP-Hooks(bainternet/PHP-Hooks)中,add_filter() 允许为同一钩子名(如 'my_filter')注册多个回调函数,但其核心机制是链式传递:每个回调接收前一个回调的返回值作为输入
,并最终只返回最后一个回调的结果。这与 WordPress 的 apply_filters() 行为一致——它不是“广播式”调用,而是值流式处理。
因此,你原始代码中:
app_hooks()->add_filter('my_filter', fn($v) => { echo $v; return "x"; });
app_hooks()->add_filter('my_filter', fn($v) => { echo $v; return "y"; });
$my_tabs[] = app_hooks()->apply_filters('my_filter', 'some value to be passed');实际执行流程为:
✅ 正确解法:避免复用同一钩子名进行“并行收集”,而应显式分发调用
推荐采用以下结构,清晰、可控且符合库设计意图:
// 为每个逻辑独立的处理器分配唯一钩子名
app_hooks()->add_filter('my_filter_x', function ($value) {
echo $value . "\n"; // 输出: some value to be passed
return "x";
});
app_hooks()->add_filter('my_filter_y', function ($value) {
echo $value . "\n"; // 输出: some value to be passed
return "y";
});
// 手动批量触发不同钩子,收集全部返回值
$hook_names = ['my_filter_x', 'my_filter_y'];
$my_tabs = [];
foreach ($hook_names as $hook) {
$result = app_hooks()->apply_filters($hook, 'some value to be passed');
$my_tabs[] = $result;
}
print_r($my_tabs);
// 输出:
// Array
// (
// [0] => x
// [1] => y
// )⚠️ 注意事项:
function apply_filters_all($hook, $value) {
$hooks = app_hooks()->get_filters($hook); // 注意:需确认库是否暴露 get_filters()
$results = [];
foreach ($hooks as $callback) {
$results[] = call_user_func($callback, $value);
}
return $results;
}(注:PHP-Hooks 默认未公开 get_filters() 方法,如需此能力,需扩展类或修改源码)
? 总结:PHP-Hooks 是轻量级钩子实现,强调链式数据流而非事件广播。追求“多回调并行返回”时,请主动管理钩子命名与调用逻辑——这是设计使然,而非使用错误。
# php
# word
# wordpress
# 处理器
# app
# internet
# 回调函数
# 工具
# ai
# 封装
# 字符串
# 事件
相关文章:
Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递
企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
如何在IIS7中新建站点?详细步骤解析
建站主机选哪家性价比最高?
Swift中swift中的switch 语句
微信小程序制作网站有哪些,微信小程序需要做网站吗?
成都网站制作报价公司,成都工业用气开户费用?
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?
微信h5制作网站有哪些,免费微信H5页面制作工具?
SQL查询语句优化的实用方法总结
C#怎么创建控制台应用 C# Console App项目创建方法
香港服务器部署网站为何提示未备案?
javascript中对象的定义、使用以及对象和原型链操作小结
香港服务器WordPress建站指南:SEO优化与高效部署策略
建站之星后台密码如何安全设置与找回?
在线制作视频的网站有哪些,电脑如何制作视频短片?
php json中文编码为null的解决办法
沈阳制作网站公司排名,沈阳装饰协会官方网站?
Android滚轮选择时间控件使用详解
如何通过西部建站助手安装IIS服务器?
香港网站服务器数量如何影响SEO优化效果?
专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?
制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?
广州建站公司哪家好?十大优质服务商推荐
制作销售网站教学视频,销售网站有哪些?
网站企业制作流程,用什么语言做企业网站比较好?
三星网站视频制作教程下载,三星w23网页如何全屏?
网站设计制作公司地址,网站建设比较好的公司都有哪些?
如何通过网站建站时间优化SEO与用户体验?
如何在云主机上快速搭建多站点网站?
如何选择高效便捷的WAP商城建站系统?
如何在Golang中使用replace替换模块_指定本地或远程路径
SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?
北京网站制作网页,网站升级改版需要多久?
如何通过WDCP绑定主域名及创建子域名站点?
如何选择高效稳定的ISP建站解决方案?
如何选择适配移动端的WAP自助建站平台?
建站之星安装后如何自定义网站颜色与字体?
家庭服务器如何搭建个人网站?
如何批量查询域名的建站时间记录?
,想在网上投简历,哪几个网站比较好?
c# 服务器GC和工作站GC的区别和设置
广州商城建站系统开发成本与周期如何控制?
网站制作大概多少钱一个,做一个平台网站大概多少钱?
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
如何配置IIS站点权限与局域网访问?
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
,网页ppt怎么弄成自己的ppt?
*请认真填写需求信息,我们会在24小时内与您取得联系。