2009-12-28 82 views
0

在生成select标记为一个布尔值,我用下面的代码:

<select name="name" id="id"> 
    <option value="0"<?php if(empty($value)): ?> selected="selected"<?php endif; ?>>Off</option> 
    <option value="1"<?php if($value): ?> selected="selected"<?php endif; ?>>Off</option> 
</select> 

所以,问题是,这个地图正确,因此,在任何时候,这两个选项都会有一个selected="selected"属性?

回答

3

我在这里看到使用empty()的唯一原因是在未设置$value的情况下避免警告。但在这种情况下,您会看到下一行的警告。否则使用!否定布尔值会更常见和更漂亮。

但是要回答你的问题,是的,你的假设是安全的。

更新:本documentation明确指出

空()(布尔值)VAR的相反,除了当没有设置可变不产生警告。

+0

没有任何价值,**!**和** empty **在值为0的情况下表现得有点奇怪,如0 == false。 – 2009-12-28 12:47:07

+0

cballou,当涉及到真相和谬误时,PHP重新定义了“奇怪”的含义。谁会猜到* string * comparison的结果''0'=='0x0';-) – 2009-12-28 13:10:01

0

eInteresting。说:

  • $valueempty($value)

倒数,在我看来,相当于断言

  • (bool) $value等于!empty($value)

在您的示例代码$value是一个bool,在这种情况下,断言是真实的(Michael Krelin - 黑客的回答是您的假设是安全的)。

但是,这是断言是一般是真的吗?考虑到手册的文件empty(),我想可能是。

+0

它*是*。该手册明确指出“empty()与(boolean)var相反,只是在未设置变量时不会生成警告。” – 2009-12-28 12:38:50

+0

那么,假设它是安全的,作出关于PHP的假设;-) – 2009-12-28 12:42:05

+0

如果我们不能做出关于PHP的这种假设,Michael会遇到麻烦,Michael :-) – 2009-12-28 13:01:41

相关问题