删除CodeIgniter函数中的重复代码
问题描述:
我们使用CodeIgniter来包装一些内部函数并将结果显示在json中。删除CodeIgniter函数中的重复代码
偶尔我们的内部函数可能会将调试字符串打印到屏幕上。因此,我们已经开始使用输出缓冲来捕获任何调试并将其添加到结果中$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.';
}
});
并做所有你的代码。
Ofcourse您还可以将重复的代码包装在2个函数中,然后调用它们,就像讨厌,但会为您节省一些空间。
不确定我遵循什么“我们正在使用CodeIgniter来包装一些内部功能”的意思,但你可能想看看控制器挂钩http://ellislab.com/codeigniter/user-guide/general/hooks.html – jmadsen
“内部函数”是指我们的遗留代码(通常隐藏在公共视图中)。我们通过json公开了其中的一些。也许你可以扩大你的答案一点点? –