我有一个函数,基本上,它执行以下操作:
启动变量 --> while
循环 ->结果存储在数据库中。
但是,由于我项目的各个部分都使用此函数,因此我必须为每个步骤添加回调函数,以便给自己一些灵活性。
我当前的实现如下所示:
function doStuff(arg1, arg2, $callbacks = array())
{
//Init vars
$var1 = ...
$var2 = ...
$callbacks['onStart']();//callback..
//Loop:
while(....)
{
$callbacks['afterCycle']; //callback after each loop.
}
//Database storage.
$this->store($data);
$callbacks['onEnd'](); //callback...
}
但是我目前对这个函数的实现对我来说并不令人满意,我认为维护代码并不容易,如果我想创建另一个类似的函数(init->loop->storage(,我会重复自己,我的代码不会一致,例如,当前的后循环回调函数称为"afterCycle",但对于另一个函数, 它可以被称为"afterLoop",这将使我的代码不一致且更难理解。
我目前的想法是创建一个类,将这些回调函数存储在预定义的公共字段中,因此名称是不可更改的,此外,函数doStuff
将强制传递该回调类的对象。我还不确定这个新的实现是否有任何好处,这就是我在这里问的原因。
我想到的新实现看起来像这样:
function doStuff(arg1, arg2, Callback $callbacks)
{
//Init vars
$var1 = ...
$var2 = ...
$callbacks->onStart();//callback..
//Loop:
while(....)
{
$callbacks->afterCycle(); //callback after each loop.
}
//Database storage.
$this->store($data);
$callbacks->onEnd(); //callback...
}
您可以使用接口
interface ICallBack {
public function onStart();
public function afterCycle();
public function onEnd();
}
//So all the methods in ICallBack must be implemented within CallBack
class CallBack implements ICallBack {
public function onStart() {
//blah
}
...
}
function doStuff(arg1, arg2, ICallback $callback){
//Init vars
$var1 = ...
$var2 = ...
$callback->onStart();//callback..
....
}