我有一个函数,可以由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 {}
)。如果要与他人的代码集成,请考虑使用标准语法。