我有一个可以通过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!)
因此,当我尝试使用这些数字时会出现问题。你能看到错误并帮我纠正吗?
由于
答案 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 {}
)。如果您要与其他人的代码集成,请考虑使用标准语法。