PHP 打印布尔值是空的,为啥?

Posted

技术标签:

【中文标题】PHP 打印布尔值是空的,为啥?【英文标题】:PHP printed boolean value is empty, why?PHP 打印布尔值是空的,为什么? 【发布时间】:2012-02-20 22:56:58 【问题描述】:

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

【问题讨论】:

您是否尝试过直接回显file_exists($local_rate_filename);?我很好奇。 一个简单的回显(不强制转换为 int)打印一个空字符串。 【参考方案1】:

使用布尔值来回转换时要小心,the manual says:

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

所以你需要做一个:

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

【讨论】:

【参考方案2】:

关于将布尔值转换为字符串,the manual actually says:

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

布尔值总是可以表示为 1 或 0,但这不是你将它转换为字符串时得到的。

如果您希望将其表示为整数,cast it to one:

$intVar = (int) $boolVar;

【讨论】:

+1 "这允许在布尔值和字符串值之间来回转换。"如果将 FALSE 转换为“0”,情况也会如此。但是,我想,这太一致了,PHP 总是努力让程序员感到惊讶。 可以用 PHP 编写 Web 应用程序,但也可以穿着袜子在雪中徒步一英里。【参考方案3】:

结果来自这样一个事实,即如果像在您的示例中那样使用,php 会隐式地将 bool 值转换为字符串。 (string)false 给出一个空字符串,(string)true 给出'1'。这与'' == false'1' == true 的事实是一致的。

【讨论】:

不,这不是我所看到的。不打印 (换行符)。 在控制台运行 php -a。然后做 echo false。"";并回显真。"";.顺便提一句。抱歉,我编辑了帖子,使您的评论失去了上下文。在我读到这篇文章之前我已经这样做了。【参考方案4】:

如果您想在不确定返回类型是 true/false 或 0/1 时检查文件是否存在,您可以使用 ===。

if($local_rates_file_exists === true)

   echo "the file exists";

else

   echo "the doesnt file exists";

【讨论】:

php > echo (int)(true === 1); 0

以上是关于PHP 打印布尔值是空的,为啥?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Coq 中的逻辑连接词和布尔值是分开的?

js空数组

为啥我的 $_ENV 是空的?

字符串布尔比较 - 为啥?

js基本语法之 值类型(数据类型)(变量类型)

为啥这个 if 语句以非布尔值成功?