我是PHP的新手。我正在实现一个脚本,我对以下内容感到困惑:
$local_rate_filename = $_SERVER['DOCUMENT_ROOT']."/ghjr324l.txt";
$local_rates_file_exists = file_exists($local_rate_filename);
echo $local_rates_file_exists."<br>";
这段代码显示一个空字符串,而不是0或1(或true或false)。为什么?文档似乎表明布尔值总是0或1.这背后的逻辑是什么?
答案 0 :(得分:42)
使用布尔值来回转换时要小心,手册说:
布尔值TRUE值转换为字符串“1”。布尔值为FALSE 转换为“”(空字符串)。这允许转换回来 在布尔值和字符串值之间。
所以你需要做一个:
echo (int)$local_rates_file_exists."<br>";
答案 1 :(得分:22)
关于将布尔值转换为字符串the manual actually says:
布尔 TRUE 值转换为字符串“1”。布尔 FALSE 转换为“”(空字符串)。这允许在布尔值和字符串值之间来回转换。
布尔值总是可以表示作为1或0,但这不是你将它转换为字符串时所得到的。
如果您希望将其表示为整数cast it to one:
$intVar = (int) $boolVar;
答案 2 :(得分:1)
结果来自这样一个事实:如果像你的例子一样使用,php会隐式地将bool值转换为字符串。 (string)false
提供一个空字符串,(string)true
提供'1'
。这与'' == false
和'1' == true
。
答案 3 :(得分:0)
如果你想确定当你不确定返回类型是真/假还是0/1时你可以使用===。
if($local_rates_file_exists === true)
{
echo "the file exists";
}
else
{
echo "the doesnt file exists";
}