删除CodeIgniter函数中的重复代码


Remove repeating code in CodeIgniter functions

我们使用CodeIgniter来包装一些内部函数,并将结果显示在json中。

有时,我们的内部函数可能会将调试字符串打印到屏幕上。因此,我们已经开始使用输出缓冲来捕获任何调试,并将其添加到结果$data['response']['debug'] = $ob;

这似乎运行得很好,因为我们已经开始将此代码放入大多数公开的CI函数中。

我们现在似乎经常重复这种代码流。

将"重复"部分提取到需要时调用的通用模板中的最佳方法是什么?(并不是每个函数都实现这一点,只是大多数函数实现了这一点)。

示例代码:

public function some_function($var){
    ob_start();  //repeated
    $this->load->model('some_model');
    $result = $this->some_model->do_something($var);
    if($result){
        $data['response']['result'] = true;
    }else{
        $data['response']['error'] = 'Something not found.';
    }
    $ob = ob_get_clean(); //repeated
    if($ob!=''){
        $data['response']['debug'] = $ob; //repeated
    }
    $this->load->view('json',$data); //repeated
}

如果你有PHP 5.3.0或更高版本,你可以做这样的事情:

function debug_func($code){
ob_start();  //repeated
$code();
$ob = ob_get_clean(); //repeated
if($ob!=''){
    $data['response']['debug'] = $ob; //repeated
}
$this->load->view('json',$data); //repeated
}

并像这样使用您的代码:

debug_func(function(){
$this->load->model('some_model');
$result = $this->some_model->do_something($var);
if($result){
    $data['response']['result'] = true;
}else{
    $data['response']['error'] = 'Something not found.';
}
});

然后像那样编写代码。

当然,您也可以将重复的代码封装在2个函数中,然后调用它们,这同样令人讨厌,但会节省一些空间。