PHP | Invalid numeric literal エラーの原因と修正案

PHP,PHP エラー

PHPでエラー「 Invalid numeric literal」が発生する原因と対処・修正案について紹介しています。

Parse error: Invalid numeric literal in ~
解析エラー: 数値リテラルが無効です

確認環境

エックスサーバー
PHP 8.016

Invalid numeric literal エラーの発生原因

「Invalid numeric literal」というPHPエラーは0から始まる数値を利用した時に、8進リテラルまたは10進リテラルとして扱われてしまう事で発生するエラーです。

このエラーは解析エラー(Parse error)に分類されています。

php5.4から発生するようになった問題で、PHP7.xからは「Invalid numeric literal」エラーとなっているようです。

例えば、「08」以上の数値を扱う際に発生します。

以下のPHPコードを実行した場合「07」は数値として扱われますが、「08」は8進数または10進数の解析でエラーとなってしまいます。

echo 07;
// 7
echo 08;
// Parse error: Invalid numeric literal in ~

変数や配列に入れた時点で「Invalid numeric literal」エラーが発生するので確認は容易ですが、動的に配列に指定している場合は気付きにくいかもしれません。

$arr = [07,08];
// Parse error: Invalid numeric literal in ~

Invalid numeric literal エラーの修正案

「Invalid numeric literal」エラーを修正するには、基本的には0が頭につけて数値を扱わない事ですが、文字列との変換など状況でどうしても生じてしまう場合、(int)などで数値として扱う時に頭の0を除去して利用する事も可能です。

$num = '08';
echo (int)$num + 5;
// 13;

PHP,PHP エラー

Posted by Yousuke.U