簡體   English   中英

0 == *計算結果為真,0 === *計算為假

[英]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不做任何類型強制,這意味着相同, ab必須是:

  • 相同類型(整數/數字或字符串)
  • 具有相同的價值

現在, integer不是string ,因此0 === '*'計算結果為false

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM