功能输出问题

时间:2013-12-11 16:58:07

标签: php function if-statement

我有一个可以通过echo或load调用的函数,对于echo或load也可以调用0或1。但是,由于将数字变量添加到函数选项中,它不再总是有效。

你能帮帮我吗?

这是我的功能:

// GET MAIN INFORMATION
function get_info ($KEY, $OUTPUT = 0) {

$KEY = "_" . strtoupper($KEY);
if ($OUTPUT == "echo" || $OUTPUT == 0):
    echo "echo " . constant($KEY);
elseif ($OUTPUT == "load" || $OUTPUT == 1):
    return "load " . constant($KEY);
endif;

}

现在当我尝试调用这样的函数时:

echo 1;
get_info('scripts_url', 'echo');

echo "<br>" . 2;
get_info('scripts_url', 0);

echo "<br>" . 3;
echo get_info('scripts_url', 'load');

echo "<br>" . 4;
echo get_info('scripts_url', 1);

这是我的输出:

1echo scripts/ (This is correct!)
2echo scripts/ (This is correct!)
3echo scripts/ (This is not correct!)
4load scripts/ (This is correct!)

因此,当我尝试使用这些数字时会出现问题。你能看到错误并帮我纠正吗?

由于

1 个答案:

答案 0 :(得分:2)

由于PHP的rules for boolean comparisons,非数字字符串"load"如实地与整数0进行比较。因此,您的第一个条件将匹配任何无法直接转换为非零整数的字符串。不要通过==进行松散比较,而是通过===进行严格比较。

function get_info($key, $output = 0)
{
    $key = "_" . strtoupper($key);

    // Strict comparisons should be used to avoid strings matching int 0
    if ($output === "echo" || $output === 0) {
        echo "echo " . constant($key); 
    } elseif ($output === "load" || $output === 1) {
        return "load " . constant($key);
    }
}

除此之外,与您的问题无关,但PHP中的备用流控制样式(if/elseif/endif及其循环表兄弟)主要用于在HTML中进行模板化。在直接PHP中使用它们是非常规的,其中使用标准大括号语法是首选。 (if {})。如果您要与其他人的代码集成,请考虑使用标准语法。