gpt4 book ai didi

php - 0 == * 计算结果为 true,0 === * 计算结果为 false

转载 作者:行者123 更新时间:2023-11-29 08:09:26 25 4
gpt4 key购买 nike

今天早上,在编辑突然无法运行的 CRON 编辑器时,我发现了一个我无法真正解释的奇怪现象。希望这里有人能启发我。

假设有人可以在没有任何上下文的情况下回答这个问题,我的问题本质上是“为什么 0 == * 的计算结果为真?”

详细信息

我们将所有事件 CRON 作业的详细信息存储在 MySQL 表中。分钟、小时、天和月字段的类型为 varchar,默认为“*”。编辑 CRON 作业时,我们有一个选择,应该从获取的行中选择当前值,下面标记为 $CRON ,下面是一个示例。

Array ( [CRONID] => 10 [Minutes] => 21 [Hours] => 6 [Days] => * [Months] => * [Weekday] => * [File] => CRON_Prop_44.php [Status] => 1 [CreateBy] => 128 [CreateDate] => 2014-02-20 [ChangeBy] => 128 [ChangeDate] => 2014-02-20 )

损坏的选择

以下内容将生成一个选择,其中星期日为选定选项。 Inspector 显示选项 value="*"和选项 value="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 必须是:

  • 相同类型(整数/数字或字符串)
  • 具有相同的值

现在,整数不是字符串,因此0 === '*' 的计算结果为false.

关于php - 0 == * 计算结果为 true,0 === * 计算结果为 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21921082/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com