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 打印布尔值是空的,为啥?的主要内容,如果未能解决你的问题,请参考以下文章