PHP打印出来的布尔值是空的,为什么?

问题描述 投票:0回答:4

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

php boolean echo
4个回答
54
投票

使用布尔值来回转换时要小心,手册说

布尔 TRUE 值转换为字符串“1”。布尔值 FALSE 是 转换为“”(空字符串)。这允许转换回来和 介于布尔值和字符串值之间。

所以你需要做一个:

echo (int)$local_rates_file_exists."<br>";

23
投票

关于将布尔值转换为字符串,手册实际上

布尔值 TRUE 转换为字符串“1”。布尔值 FALSE 转换为“”(空字符串)。这允许在布尔值和字符串值之间来回转换。

布尔值总是可以 represented 为 1 或 0,但这不是将其转换为字符串时得到的结果。

如果你希望它被表示为一个整数,将它转换为一个

$intVar = (int) $boolVar;

1
投票

结果来自这样一个事实,即如果像在您的示例中那样使用,php 会将 bool 值隐式转换为字符串。

(string)false
给出空字符串,
(string)true
给出
'1'
。这与
'' == false
'1' == true
.

的事实是一致的

0
投票

如果您想在不确定返回类型是真/假还是 0/1 时检查文件是否存在,您可以使用 ===.

if($local_rates_file_exists === true)
{
   echo "the file exists";
}
else
{
   echo "the doesnt file exists";
}
© www.soinside.com 2019 - 2024. All rights reserved.