我在php中有一个重复的代码,我想我可以以某种方式压缩成一个函数并简单地多次调用该函数。我试过这样做,似乎没有任何事情发生。这是重复旧代码:
if ($health_1 > $health_2) {
$health_left = '#7fba00';
$health_right = '#e81123';
} else if ($health_perlvl_1 == $health_perlvl_2) {
$health_left = '#0451ff';
$health_right = '#0451ff';
} else {
$health_left = '#e81123';
$health_right = '#7fba00';
}
这和其他统计数据重复约12次。我决定尝试将其浓缩为:
function stat_color($stat_1,$stat_2,$color_left,$color_right) {
if ($stat_1 > $stat_2) {
$color_left = '#7fba00';
$color_right = '#e81123';
} else if ($stat_1 == $stat_2) {
$color_left = '#0451ff';
$color_right = '#0451ff';
} else {
$color_left = '#e81123';
$color_right = '#7fba00';
}
}
stat_color($health_1,$health_2,$health_left,$health_right);
但是在需要它们时,颜色不会出现。有没有办法真正实现这个目的?
答案 0 :(得分:2)
试试这个:
function stat_color($stat_1,$stat_2,&$color_left,&$color_right) {
这样它会更新你传递给函数的变量。
答案 1 :(得分:1)
当然,由于形式参数是函数范围的局部参数,因此它们的值不能在函数外使用。试试这个。
由于我们无法返回多个值,因此我使用了具有适当键的数组。
function stat_color($stat_1,$stat_2) {
$arr = array();
if ($stat_1 > $stat_2) {
$arr["color_left"] = '#7fba00';
$arr["color_right"] = '#e81123';
} else if ($stat_1 == $stat_2) {
$arr["color_left"] = '#0451ff';
$arr["color_right"] = '#0451ff';
} else {
$arr["color_left"] = '#e81123';
$arr["color_right"] = '#7fba00';
}
return arr;
}
您现在可以使用:
$colors = stat_color(stat1,stat2);
使用$colors["color_left"]
或$colors["color_right"]
来指代适当的颜色。
答案 2 :(得分:0)
你可以这样返回字符串:
return array('#7fba00', '#e81123');
然后当你想再次获得它们时:
list($health_left, $health_right) = stat_color($health_1, $health_2);
你可以使用传递引用变量执行此操作,但感觉不那么优雅。