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

时间:2016-02-26 07:05:28

标签: php function global

我有两个几乎相同的功能,我不熟悉PHP,但只需要一些解决方法。我有几个函数,如这里显示的两个,我想知道如何将它们合并为一个。我使用PHP-5.4

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'] = '';
     }
}

4 个答案:

答案 0 :(得分:1)

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

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

function is_checked($block_name, &$curr_rec, $rec_num, $checked, $list) {
    ....

    return $list;
}

此处,$list(以前称为$gen_list$veh_list)是从函数返回的,因此您可以使用它来更新您调用的变量:

$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 :(得分:1)

在每个函数中,只有在数组中找到checked时才会更新相应的列表。因此将该列表作为参考传递并更新。

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);

答案 2 :(得分:1)

如果您要$gen_list$gen_checked,然后$veh_list$veh_checked,那么您应该将其变成一个类。

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

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, ...);

答案 3 :(得分:0)

我想这个问题是错误的。 首先要合并两个函数,如果你正在编写程序或OOP,那么你需要它。

应将程序划分为小型服务并添加它们以执行复杂任务。 OOP可以使用继承,但在此之前它们为继续重构之前提供了坚实的基础。

你必须专门识别常见问题并重构一件事

示例未经过测试

//重构

fucntion is_checked_by($block_name, &$curr_rec, $rec_num, $obj_checked, $list_checked )
{


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


function is_checked_gen($block_name, &$curr_rec, $rec_num) {

         is_checked_by($block_name, &$curr_rec, $rec_num, $gen_checked, $gen_list )
}

function is_checked_veh($block_name, &$curr_rec, $rec_num) {
      is_checked_by($block_name, &$curr_rec, $rec_num, $veh_checked, $veh_list )
}  

这只是一个例子而不是最好的只是让你了解OOP的任何资金