PHP 属性布尔奇数


PHP Attribute Boolean Oddities

当我在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的"坏部分"。