我有一个非常简单的php代码,它根据时间回声特定的数字,但它总是指出case 09
是问题所在。这是我的代码:
<?php
$hour = date('H');
switch ($hour) {
//Midnight
case 00:
echo '1';
// 3 AM
case 03:
echo '2';
// 6 AM
case 06:
echo '3';
// 9 AM
case 09:
echo '4';
// Mid-day
case 12:
echo '5';
// 3 PM
case 15:
echo '6';
// 6 PM
case 18:
echo '7';
// 9 PM
case 21:
echo '8';
}
错误:PHP Parse error: Invalid numeric literal in line 17
λ php -version
PHP 7.4.16 (cli) (built: Mar 2 2021 14:06:13) ( NTS Visual C++ 2017 x64 )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
这是个虫子吗?
您应该将它们用作字符串或实际整数。
意味着你应该使用1而不是01,或者如果你想使用01,那么像字符串一样使用它,例如:";01";。
<?php
$hour = date('H');
switch ($hour) {
//Midnight
case "00":
echo '1'; break;
// 3 AM
case "03":
echo '2'; break;
// 6 AM
case "06":
echo '3'; break;
// 9 AM
case "09":
echo '4'; break;
// Mid-day
case "12":
echo '5'; break;
// 3 PM
case "15":
echo '6'; break;
// 6 PM
case "18":
echo '7'; break;
// 9 PM
case "21":
echo '8'; break;
}
?>
您可以找到答案
此处
用作字符串或实际整数
9 // Integers
"09" // Strings
OP,您的代码可以简化为:
echo floor($hour / 3) + 1;
此外,您的初始代码在每个case
节的末尾都未命中break;
,并且必须为每个case
条件截断零(或将数字包装为字符串(。
第页。S.您也可以使用date('G')
而不是date('H')
来减少您使用前导零创建的问题。
decimal : [1-9][0-9]*(_[0-9]+)*|0
octal : 0[0-7]+(_[0-7]+)*
根据文档regex,考虑值为十进制和八进制,在上给出
在这种情况下,值为09也不能通过八进制或十进制的验证。由于给定了错误,将参数解析为字符串部分解决了问题。
注意:在PHP中,任何数字从零开始都被视为八进制,但8和9将不会在八进制数中使用,从而引发此错误。