将PHP代码压缩成函数

时间:2014-02-28 20:31:03

标签: php

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

但是在需要它们时,颜色不会出现。有没有办法真正实现这个目的?

3 个答案:

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

可以使用传递引用变量执行此操作,但感觉不那么优雅。