php - 责任链实施
问题描述
我已经在 PHP 中使用多个处理程序实现了责任链模式。正如模式所暗示的,我可以将处理程序链接如下:
$handler = new Handler();
$handler->chainNext(new HandlerOne)->chainNext(new HandlerTwo)->chainNext(new HandlerThree);
$result = $handler->handle();
我想以一种更加程序化的方式来做到这一点,但我没有做到这一点。在数组中存储处理程序时,只有第一个和最后一个处理程序得到处理(执行)。
$handler = new Handler();
foreach ($handlers as $element) {
$handler->chainNext(new $element);
}
$result = $handler->handle();
您对如何以编程方式对此有任何建议吗?这样做的主要原因:我永远不会知道需要执行多少个处理程序(1..n)。我需要这是动态的,因为它们将从数据库中读取。
解决方案
您需要在下一个循环中使用 $element 。像这样:
$handler = new Handler();
$last = $handler;
foreach ($handlers as $element) {
$last->chainNext($element);
$last = $element;
}
$result = $handler->handle();
代码假定 $handlers 已经包含对象实例(那么新的 $element 是错误的......)
推荐阅读
- scala - 为什么会立即终止?
- rpm - 在定义的目录中安装 RPM 包
- python - 如果条件在 django 中没有按预期响应类似按钮
- deadlock - 超过2个进程的死锁,可能吗?
- php - 如何在 Codeigniter PHP 中删除 stdClass 对象
- c - 有人可以帮我弄清楚为什么 VS Code 拒绝承认 getline 作为一个函数吗?
- x86 - 如何通过 GRUB 调用 ExitBootService
- angular - 如何在 NativeScript 对话框中使用 DatePicker
- javascript - 在更新前挂钩中调用分配给变量的方法
- java - 绘画程序可以在 Windows 上运行,但不能在我的 Mac 上运行?