2009-12-28 97 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

相關問題