功能输出问题


Function Output Issues

我有一个函数,可以由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!)

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

感谢

由于PHP的布尔比较规则,非数字字符串"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中使用它们有点不传统,在PHP中首选使用标准的大括号语法。(if {})。如果要与他人的代码集成,请考虑使用标准语法。