Сегодня утром, редактируя наш редактор CRON, который неожиданно не удалось запустить, я нашел странность, которую я не могу объяснить. Надеюсь, кто-то здесь может просветить меня.0 == * оценивает true, 0 === * оценивает false
Предположим, что кто-то может ответить на этот вопрос без какого-либо контекста, мой вопрос по существу «Почему 0 == * оценивается как истина?»
Подробности
Мы храним информацию обо всех активных заданий CRON в таблице MySQL. Тип полей Minutes, Hours, Days и Months - varchar
со значением по умолчанию '*'. При редактировании задания CRON у нас есть выбор, который должен был выбрать текущее значение из выбранной строки, помеченную ниже как $CRON
и пример которой следует.
Array ([CRONID] => 10 [минут] => 21 [часов] => 6 [дней] => * [месяцев] => * [Будний] => * [Файл] => CRON_Prop_44 .php [Статус] => 1 [CreateBy] => 128 [CreateDate] => 2014-02-20 [ChangeBy] => 128 [ChangeDate] => 2014-02-20)
Сломанная Выберите
Следующее будет производить выбор с воскресеньем в качестве выбранного варианта. Инспектор показывает, что выбрано значение параметра = "*" и значение опции = "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 == *
?
The (Сорт) Функционирование Выбери
Я думал, что код предыдущего человека выше был немного грязным, так что я сейчас делаю следующее. Тем не менее, изменение ===
на ==
приводит к тому, что будет выбрано только воскресенье.
<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>
Если вы продлился до конца этого поста, скажите, пожалуйста, что мне не хватает?
Ahhhh Я вижу, спасибо. – jboneca