当我在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
的{{1}}为“true”,其文本为“true”,而第二个ID
的{{1}}为div
假“并且将”假“作为其内容。我在谷歌Chrome 34和Firefox 29 Beta中测试了这个(IE11不会加载页面)。我使用Firebug,Google Chrome的Web开发人员工具和Firebug Lite来查看浏览器不会显示的内容。这是怎么回事?
答案 0 :(得分:2)
echo
基本上将布尔值转换为字符串然后打印它。问题是,false
在字符串化时是空字符串""
,而true
是非空字符串'1'
。
为什么会发生这种奇怪的行为? PHP的创建者希望在转换类型时保持传递的等式。
一个常见的设计问题是: truthy 是什么字符串(与true
比较时成功)以及 falsy 是什么字符串(与{{ 1}})。许多语言认为空字符串false
由 falsy 和 任何非空字符串 为 truthy
从this link,您可以看到:
""
很高兴有(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,break transitivity。许多人认为这是一个不好的部分&#34; JavaScript。