我有一个可以在 CLI 或 Web 应用程序中使用的功能,也就是说,过程中存在一些差异;例如:如果我将此函数用于 CLI,它将使用文本进度条,但如果我将此函数用于 Web 应用程序,则没有意义。
该函数基本上是一个循环;所以我正在寻找一种使这个函数灵活的方法,它可以将代码作为参数传递,以便在每个循环周期结束时执行它。因此,如果我在 CLI 中使用此功能;我将传递一个进度增量函数来推进进度条,依此类推。
我目前的解决方案是传递一个进度条对象实例,我认为这不是一个合适的解决方案;因为从长远来看,它似乎并不灵活。
我已经在做的一个演示示例:
function myFunction($progressBar = null)
{
for($i = 0; $i......)
{
//Do stuff
....
//finally...
if(!empty($progressBar))
$progressBar->advance();
}
}
所以,如果我想在循环结束时添加另一个函数,我必须将它作为参数传递并稍后手动调用它;但正如我所说,这似乎并不正确。
我正在考虑使用回调函数(传递给 myFunction 的匿名函数)但是这样做的正确方法是什么?我应该将每个回调函数作为一个单独的参数吗?或者,为了使其更加灵活,我应该将所有回调函数分组到一个数组中(如果可能的话)。