讲师中心 微信公众号
AI工具推荐 视频效率加速

PHP Hooks 库中实现多过滤器并行执行并收集全部返回值的正确方法

夜婷姑娘_7175

夜婷姑娘_7175

发布时间:2025-12-29 15:10:02

|

631人浏览过

|

来源于php中文网

原创

PHP Hooks 库中实现多过滤器并行执行并收集全部返回值的正确方法

php-hooks 库的 `apply_filters()` 默认仅返回最后一个回调的返回值;若需收集所有已注册同名钩子的返回结果,须手动遍历调用或改用支持“累积模式”的钩子机制。

在 PHP-Hooks(bainternet/PHP-Hooks)中,add_filter() 允许为同一钩子名注册多个回调函数,但 apply_filters($hook, $value) 的行为是链式传递:前一个回调的返回值会作为参数传给下一个回调(即 $value 被不断覆盖),最终只返回最后一个回调的执行结果。这正是你观察到 'xy' 输出和最终数组仅含 y 的根本原因:

// 执行流程等价于:
$value = 'some value to be passed';
$value = call_user_func($callback1, $value); // → "x"
$value = call_user_func($callback2, $value); // → call_user_func($cb2, "x") → 输出 "x",返回 "y"
// 最终 apply_filters 返回 "y"

因此,无法通过重复调用 add_filter('my_filter', ...) 并单次 apply_filters('my_filter', ...) 实现多结果收集。

✅ 正确解法:为每个逻辑回调分配唯一钩子名,并显式循环调用

password-manager
password-manager

本地密码管理技能,可添加、编辑、删除、搜索密码,支持分类和备注,数据本地存储,支持导入导出和备份。用户提及密码、账号、密码管理、保存密码或查找密码时使用。

下载
app_hooks()->add_filter('my_filter_x', function ($value) {
    echo $value; // 输出: some value to be passed
    return "x";
});

app_hooks()->add_filter('my_filter_y', function ($value) {
    echo $value; // 输出: some value to be passed(注意:不再是 "xy")
    return "y";
});

$my_tabs = [];
$hook_names = ['my_filter_x', 'my_filter_y'];

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
// )

⚠️ 注意事项:

立即学习“PHP免费学习笔记(深入)”;

  • 避免复用同一钩子名期望“并行执行”——PHP-Hooks 本质是过滤器链(filter chain),非事件总线(event bus);
  • 若业务逻辑强依赖“同一语义钩子触发多个独立处理”,建议封装一层调度器,或迁移到更成熟的钩子系统(如 WordPress Hooks 或 Symfony EventDispatcher);
  • 确保 php-hooks.php 已正确加载且 $hooks 全局实例唯一,多次调用 app_hooks() 应返回同一对象(可加 static $instance 缓存优化)。

总结:PHP-Hooks 的设计目标是值转换(transform),而非结果聚合(collect)。需要多结果时,请主动解耦钩子命名并循环调用——这是清晰、可控且符合库设计意图的做法。

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

花生AI
花生AI Hot

一款AI视频创作工具,主要用于B站推出的AI视频创作工具,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

相关专题

更多
PHP Symfony框架
PHP Symfony框架

本专题专注于PHP主流框架Symfony的学习与应用,系统讲解路由与控制器、依赖注入、ORM数据操作、模板引擎、表单与验证、安全认证及API开发等核心内容。通过企业管理系统、内容管理平台与电商后台等实战案例,帮助学员全面掌握Symfony在企业级应用开发中的实践技能。

6057

2025.09.11

wordpress seo
wordpress seo

WordPress网站SEO优化方法有:1、选择一个SEO友好的主题,具有清晰的代码结构,快速的加载速度和响应式设计;2、使用SEO插件,优化你的标题标签,元描述,关键字,XML站点地图等;3、优化你的内容,内容是SEO优化的核心;4、优化你的网站速度;5、创建友好的URL;6、使用内部链接;7、优化图像;8、使用社交媒体;9、定期更新你的网站;10、监控和分析你的网站等等。

6335

2023.09.18

wordpress下载后怎么安装
wordpress下载后怎么安装

安装前准备:确保服务器满足要求、获取安装文件、创建数据库。上传 wordpress 文件。创建数据库和用户。运行安装程序:选择语言、输入数据库信息、网站标题和管理员信息。安装 wordpress。安装后配置:设置永久链接、安装主题、安装插件、创建内容。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

6419

2024.04.15

WordPress插件教程
WordPress插件教程

本专题整理热门WordPress插件资源,涵盖SEO优化、缓存加速、安全防护、表单管理、电商扩展等插件推荐与使用教程。

318

2026.06.16

WordPress建站教程大全
WordPress建站教程大全

本专题汇总WordPress教程相关内容,包括WordPress安装教程、建站教程、使用技巧、网站管理经验和实战案例,帮助用户快速掌握WordPress建站与运营方法。

800

2026.06.16

WordPress开发教程
WordPress开发教程

本专题提供WordPress开发技术资料,包括主题开发、插件开发、自定义功能开发、API调用及性能优化等内容。

938

2026.06.16

Uvicorn 报错与问题解决教程
Uvicorn 报错与问题解决教程

本专题汇总了Uvicorn服务器常见问题与报错解决的教程合集,涵盖启动失败、端口占用、模块导入错误、事件循环冲突及热重载失效等典型故障的排查思路。同时整理了多进程与Worker配置、SSL/HTTPS证书报错、跨域与代理配置等实战解决方案,助你快速定位并解决Uvicorn运行中的各类问题。

0

2026.11.02

Uvicorn使用教程
Uvicorn使用教程

本专题汇总了Uvicorn使用教程与启动运行指南,涵盖其作为Python ASGI服务器的定位与特点,以及命令行启动(uvicorn main:app --reload)、参数配置(host/port/workers)、程序内嵌运行与Gunicorn结合部署等核心用法。同时整理了热重载调试、日志配置与生产环境部署优化等技巧,助你快速掌握Uvicorn的运行与配置。

0

2026.11.02

Uvicorn安装配置教程
Uvicorn安装配置教程

本专题汇总了Uvicorn的安装配置教程与部署指南,涵盖通过pip安装Uvicorn、启动FastAPI/Starlette应用、开发模式热重载(--reload)及多进程工作模式配置等核心操作。同时整理了结合Gunicorn的生产部署方案、HTTPS与反向代理配置及性能调优技巧,助你快速完成Uvicorn服务的安装与上线部署。

0

2026.11.02

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
墨刀帮助中心
墨刀帮助中心

共0课时 | 0人学习

MyEclipse学习中心
MyEclipse学习中心

共0课时 | 0人学习

Apache Subversion 官方手册
Apache Subversion 官方手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn