Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 删除CodeIgniter函数中的重复代码_Php_Codeigniter_Ob Start - Fatal编程技术网

Php 删除CodeIgniter函数中的重复代码

Php 删除CodeIgniter函数中的重复代码,php,codeigniter,ob-start,Php,Codeigniter,Ob Start,我们使用CodeIgniter包装一些内部函数,并以json显示结果 有时,我们的内部函数可能会在屏幕上打印调试字符串。因此,我们已经开始使用输出缓冲来捕获任何调试,并将其添加到结果$data['response']['debug']=$ob 当我们开始将此代码放到大多数公开的CI函数中时,这似乎工作得非常好 我们现在似乎经常重复这个代码流 将“重复”部分提取到通用模板(需要时调用)的最佳方法是什么?(并非每个函数都实现了这一点——只是大多数函数) 示例代码: public function s

我们使用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.';
}

});
并使用如下代码:

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个函数中并调用它们,这同样令人讨厌,但会为您节省一些空间。

我不确定“我们正在使用CodeIgniter包装一些内部函数”是什么意思,但您可能希望通过“内部函数”查看控制器挂钩,我指的是我们的遗留代码(这通常是隐藏在公众视野之外的)。我们通过json公开了其中的一些。也许你可以把答案再扩展一点?