PHP属性布尔奇怪

时间:2014-04-26 01:08:19

标签: php html boolean

当我在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来查看浏览器不会显示的内容。这是怎么回事?

1 个答案:

答案 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。