责任链实施
Chain of Responsibility implementation
我已经在 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 是错误的..)
我已经在 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 是错误的..)