PHP 7.1 的A non-numeric value encountered 錯誤和解決方法
升級到PHP 7.1之後,經常收到A non-numeric value encountered
的warning信息。比如下面這段代碼:
$a = '123a';
$b = 'b456';
echo $a+$b;
PHP 7.1新E_WARNING
這是PHP7.1 新增的waring 信息,官方的解釋是:
當使用期望數字(+ - * / **%<< >> |&^)或其賦值等價物的運算符強制使用無效字符串時,引入了新的E_WARNING和E_NOTICE錯誤。當字符串以數字值開頭但包含尾隨的非數字字符時,將發出E_NOTICE,並在字符串不包含數字值時發出E_WARNING。
在使用(+ – * / ** % << >> | & ^)這些運算操作符時,例如a+b,如果a(123a)和b(b456)包含非數字字符時,就會有A non-numeric value encountered
警告。
解決方法
對於這種問題,首先應該在代碼邏輯查看,為何會出現混合數值,檢查哪裡導致出現混合數值。
對於(+ – * / ** % << >> | & ^) 的運算,可以使用強制類型轉換方法(intval),把字符串轉換成數字:
$a = '123a';
$b = 'b456';
echo intval($a)+intval($b);