我有两个几乎相同的功能,我不熟悉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'] = '';
}
}
答案 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的任何资金