[英]0 == * evaluates true, 0 === * evaluates false
今天早上編輯突然無法運行的CRON編輯器時,我發現了一個奇怪的問題,我無法解釋。 希望有人在這里可以啟發我。
假設有人可以在沒有任何背景的情況下回答這個問題,我的問題基本上是“為什么0 == *評估為真?”
細節
我們將所有活動CRON作業的詳細信息存儲在MySQL表中。 “分鍾”,“小時”,“天”和“月”字段的類型為varchar
,默認為“*”。 在編輯CRON作業時,我們有一個選擇應該從已獲取的行中選擇當前值,下面標記為$CRON
,其示例如下。
數組([CRONID] => 10 [分鍾] => 21 [小時] => 6 [天] => * [月] => * [工作日] => * [文件] => CRON_Prop_44.php [狀態] = > 1 [CreateBy] => 128 [CreateDate] => 2014-02-20 [ChangeBy] => 128 [ChangeDate] => 2014-02-20)
破碎的選擇
以下將生成一個選擇星期日作為選定的選項。 Inspector顯示選擇值=“*”和選項值=“0”。
<select name="Weekday">
<option value="*" <?php if ($CRON['Weekday'] == "*" ) { echo "selected";} ?> >* - Every day</option>
<?php
$x = 0;
while ($x < 7) {
switch ($x) {
case 0:
$dayname = "Sunday";
break;
case 1:
$dayname = "Monday";
break;
case 2:
$dayname = "Tuesday";
break;
case 3:
$dayname = "Wednesday";
break;
case 4:
$dayname = "Thursday";
break;
case 5:
$dayname = "Friday";
break;
case 6:
$dayname = "Saturday";
break;
}
?>
<option value="<?php echo $x; ?><?php if ($CRON['Weekday'] == $x ) { echo "selected";} ?> ><?php echo $dayname; ?></option>
<?php
$x++;
}?>
周日也被選中的事實讓我相信0 == *
是真的。 我可以通過添加===
比較運算符而不是==
來獲得上述工作,但我不明白為什么。 這是開關的問題嗎? 選項值=“0”? 或者,如標題所示, 0 == *
是真的嗎?
(排序)功能選擇
我以為前面的人的代碼有點亂,所以我現在正在做以下事情。 仍然,將===
更改為==
導致僅選擇星期日。
<select name="Weekday">
<option value="*" <?php if ($CRON['Weekday'] == "*" ) { echo "selected";} ?> >* - Every day</option>
<?php
$days = array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");
$x = 0;
while ($x < 7) {
echo '<option value="' . $x . '" ' . (($CRON['Weekday'] == $x) ? 'selected' : "") . '>' . $days[$x] . '</option>';
$x++;
}
?>
</select>
如果你已經持續到這篇文章的結尾,請告訴我我錯過了什么?
字符串'*'
計算結果為true,因為這是字符串應根據轉換為boolean
的合同來評估的: http : //www.php.net/manual/en/language.types.boolean.php
所以應該沒有疑惑。
a === b
不做任何類型強制,這意味着相同, a
和b
必須是:
現在, integer
不是string
,因此0 === '*'
計算結果為false
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.