当我在HTML中回显PHP布尔值时,无论是在标签内部还是外部,返回的PHP代码似乎都是false
的空字符串和true
的"1"。这发生在布尔对象和返回布尔值的变量上,而不是字符串"true"和"false"。例如,在下面的代码中,
<div id="<?php echo true; ?>"><?php echo true; ?></div>
<div id="<?php echo false; ?>"><?php echo false; ?></div>
第一div
将有一个"真"的ID
,并将"真"作为其文本,而第二div
将有一个"假"的ID
,并将"假"作为其内容。我已经在Google Chrome 34和Firefox 29 Beta中对此进行了测试(IE11不会加载页面(。我使用Firebug,Google Chrome的Web开发人员工具和Firebug Lite来查看浏览器不会显示的内容。这是怎么回事?
echo
基本上是将布尔值转换为字符串然后打印它。问题是false
在字符串化时是空字符串""
,而true
是非空字符串'1'
。
为什么会发生这种奇怪的行为?PHP 的创建者希望在转换类型时保持相等性。
一个常见的设计问题是:哪些字符串是真实的(与true
相比成功(,哪些字符串是虚假的(与false
相比成功(。许多语言认为由 falsy 和任何非空字符串""
的空字符串都是真实的。
从此链接中,您可以看到:
(bool) "" == false
(bool) "1" == true
(bool) "0" == true // this is the important part
(bool) "true" == true
(bool) "false" == true // also of note
很高兴有((string) false) == false
和((bool) ((string) false)) == false
。
其他语言,如JavaScript,会破坏==
的传递性。许多人认为这是JavaScript的"坏部分"。