如何防止 PHP 在条件语句中进行八进制数学运算? (为什么 08 === 0)
How to prevent PHP from doing octal math in conditionals? (why does 08 === 0)
我正在使用解析 crontab 的代码。
我发现它工作得很好,但是我发现如果我制作一个像
这样的 cron
0 * * * *
它会在第 0 分钟、第 8 分钟和第 9 分钟运行。我分解了每一行代码。
https://gist.github.com/goosehub/7deff7928be04ec99b4292be10b4b7b0
我发现如果当前分钟是 8,我得到的是 0 的条件。
08 === 0
我用 PHP
测试了这个
if (08 === 0) {
echo 'marco';
}
运行之后,我在输出中看到 marco
。看来 PHP 正在将 08
视为八进制。因为在八进制中 07
是 010
,08
和 09
被评估为 00
.
如何在此条件中强制进行小数比较?
来自 IntegerPHP 文档
http://php.net/manual/en/language.types.integer.php
To use octal notation, precede the number with a 0 (zero).
但是,不要只使用 ltrim($time[$k], '0')
,因为这会将 0
变成 </code>。相反,请使用正则表达式。在这种情况下,<code>/^0+(?=\d)/
.
在这种情况下,像这样将其应用于 $time[$k]
输入。
$time[$k] = preg_replace('/^0+(?=\d)/', '', $time[$k]);
我正在使用解析 crontab 的代码。
我发现它工作得很好,但是我发现如果我制作一个像
这样的 cron0 * * * *
它会在第 0 分钟、第 8 分钟和第 9 分钟运行。我分解了每一行代码。
https://gist.github.com/goosehub/7deff7928be04ec99b4292be10b4b7b0
我发现如果当前分钟是 8,我得到的是 0 的条件。
08 === 0
我用 PHP
测试了这个if (08 === 0) {
echo 'marco';
}
运行之后,我在输出中看到 marco
。看来 PHP 正在将 08
视为八进制。因为在八进制中 07
是 010
,08
和 09
被评估为 00
.
如何在此条件中强制进行小数比较?
来自 IntegerPHP 文档
http://php.net/manual/en/language.types.integer.php
To use octal notation, precede the number with a 0 (zero).
但是,不要只使用 ltrim($time[$k], '0')
,因为这会将 0
变成 </code>。相反,请使用正则表达式。在这种情况下,<code>/^0+(?=\d)/
.
在这种情况下,像这样将其应用于 $time[$k]
输入。
$time[$k] = preg_replace('/^0+(?=\d)/', '', $time[$k]);