我有两个几乎相同的函数,我不熟悉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'] = '';
}
}发布于 2016-02-26 07:17:14
在每个函数中,当在数组中找到选中时,只有相应的列表被更新。因此,将该列表作为引用传递并更新它。
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);发布于 2016-02-26 07:14:30
最突出的是函数中使用的不同的全局变量。你根本不应该使用全局,但这超出了这个答案的范围。
通过将现在的全局变量作为参数发送到函数中,您可以将它们合并:
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);发布于 2016-02-26 07:20:36
如果你要有$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, ...);https://stackoverflow.com/questions/35645553
复制相似问题