PHP打印布尔值为空,为什么?

时间:2012-01-28 00:50:42

标签: php boolean echo

我是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.这背后的逻辑是什么?

4 个答案:

答案 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";
}