首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将两个非常相似的PHP函数合并为一个

将两个非常相似的PHP函数合并为一个
EN

Stack Overflow用户
提问于 2016-02-26 07:05:27
回答 4查看 70关注 0票数 0

我有两个几乎相同的函数,我不熟悉PHP,但只需要做一点工作。我有几个函数,如这里所示,我想知道如何将两者合并为一个。我使用PHP-5.4

代码语言:javascript
复制
function is_checked_gen($block_name, &$curr_rec, $rec_num) {
     global $gen_checked;
     global $gen_list;

     if (in_array($curr_rec[val], $gen_checked)) {
              $curr_rec['checked'] = 'checked';
              $gen_list .= " " . $curr_rec[val];
     } else {
              $curr_rec['checked'] = '';
     }
}

function is_checked_veh($block_name, &$curr_rec, $rec_num) {
     global $veh_checked;
     global $veh_list;

     if (in_array($curr_rec[val], $veh_checked)) {
              $curr_rec['checked'] = 'checked';
              $veh_list .= " " . $curr_rec[val];
     } else {
              $curr_rec['checked'] = '';
     }
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-02-26 07:17:14

在每个函数中,当在数组中找到选中时,只有相应的列表被更新。因此,将该列表作为引用传递并更新它。

代码语言:javascript
复制
function is_checked($block_name, &$curr_rec, $rec_num, $checked, &$list) {

     if (in_array($curr_rec[val], $checked)) {
              $curr_rec['checked'] = 'checked';
              $list .= " " . $curr_rec[val];
     } else {
              $curr_rec['checked'] = '';
     }
}

is_checked($block_name, $curr_rec, $rec_num, $gen_checked, $gen_list);
is_checked($block_name, $curr_rec, $rec_num, $veh_checked, $veh_list);
票数 1
EN

Stack Overflow用户

发布于 2016-02-26 07:14:30

最突出的是函数中使用的不同的全局变量。你根本不应该使用全局,但这超出了这个答案的范围。

通过将现在的全局变量作为参数发送到函数中,您可以将它们合并:

代码语言:javascript
复制
function is_checked($block_name, &$curr_rec, $rec_num, $checked, $list) {
    ....

    return $list;
}

在这里,从函数返回$list (以前是$gen_list$veh_list),因此您可以使用它从调用它的位置更新变量:

代码语言:javascript
复制
$gen_list = is_checked($block_name, $curr_rec, $rec_num, $gen_checked, $gen_list);
$vac_list = is_checked($block_name, $curr_rec, $rec_num, $vac_checked, $vac_list);
票数 1
EN

Stack Overflow用户

发布于 2016-02-26 07:20:36

如果你要有$gen_list$gen_checked,然后是$veh_list$veh_checked,你应该把它变成一个类。

您甚至可以将is_checked方法放入类中。

代码语言:javascript
复制
class Type {
    public $checked;
    public $list;
}

function is_checked(Type $type, $block_name, &$curr_rec, $rec_num) {

     if (in_array($curr_rec[val], $type->checked)) {
              $curr_rec['checked'] = 'checked';
              $type->list .= " " . $curr_rec[val];
     } else {
              $curr_rec['checked'] = '';
     }

}

$gen = new Type;
$veh = new Type;

is_checked($veh, ...);
is_checked($gen, ...);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35645553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档