【问题标题】:Remove repeating code in CodeIgniter functions删除 CodeIgniter 函数中的重复代码
【发布时间】:2013-08-20 19:57:17
【问题描述】:

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

【问题讨论】:

  • 不确定我是否遵循“我们正在使用 CodeIgniter 包装一些内部函数”的含义,但您可能需要查看控制器挂钩 ellislab.com/codeigniter/user-guide/general/hooks.html
  • “内部函数”是指我们的遗留代码(通常隐藏在公众视野之外)。我们正在通过 json 公开其中的一些。也许您可以将答案扩展一点?

标签: php codeigniter ob-start


【解决方案1】:

如果你有 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 个函数中并调用它们,虽然很烦人,但会节省一些空间。

【讨论】:

    猜你喜欢
    • 2022-11-08
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多