php解析错误问题:无效的数字文本



我有一个非常简单的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

这是个虫子吗?

我希望你没事。这个错误是由于PHP7中整数,特别是八进制的处理方式发生了变化(与PHP5相反(。

您应该将它们用作字符串或实际整数。

意味着你应该使用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将不会在八进制数中使用,从而引发此错误。

最新更新