PHP8系で「Uncaught TypeError: Unsupported operand types」エラー対応方法
PHP8系で「Fatal error: Uncaught TypeError: Unsupported operand types: string + int in」というエラーログが見受けられた。7系だと問題無く動いていたページだったがPHP8系だとFatal errorになり動作しなくなった。以下に対応方法をメモ。
原因
異なる方の変数を比較もしくは判別しようとした際に発生するエラー。また、文字列型に「+」演算子を使用した場合も発生する。
ちなみにこのエラーが発生したのは以下のようなソースコードでデータベースから取得してきた値に対して「+1」するという内容だったんだけど、特定のケースの場合「$database_score」は空になっており、その際に「''(空) + 1」という形になりエラーが発生した模様。
//データベースから取得してきたscoreを$hogeにセット $hoge = $database_score; //$hogeを+1 $hoge = $hoge + 1;
対応方法
issetで値が存在するかチェックし、存在しない場合は適当な値をセットする。具体的には以下のような形。
//データベースから取得してきたscoreを$hogeにセット $hoge = ( isset($database_score) ) ? 0 : 1; //$hogeを+1 $hoge = $hoge + 1;
その他
「+」演算子関連でPHPのドキュメントに「ビットシフトや加算、減算に対する連結演算子の優先順位が変更されました。 」と案内あり。具体的には以下のような内容。
<?php
echo "Sum: " . $a + $b;
// 上記は、以前のバージョンでは以下のように解釈されていました:
echo ("Sum: " . $a) + $b;
// PHP 8.0.0 からは、以下のように解釈されます:
echo "Sum:" . ($a + $b);
?>
これ気を付けないと間違えてしまいそうなので気を付ける。
関連記事
- 
					
													  
- 
					FLASHから受信した画像をPHPで保存し、サムネイルも作る■参考サイト ・FLASH http://www.ilovex.co.jp/bl ... 
- 
					
													  
- 
					PHPからDBX Platformを利用してDropbox内にディレクトリ(フォルダ)を作成する方法PHPからDBX Platformを利用してDropbox内にディレクトリ(フォ ... 
- 
					
													  
- 
					mpdfで「The /e modifier is …」エラー発生時の対応方法pdf関連のPHPライブラリ「mPDF」を使っているページがエラーログにのってお ... 
- 
					
													  
- 
					PHPで縦横どちらかが指定の長さを超えた場合、比率を保ったままリサイズPHPで縦横どちらかが指定の長さを超えた場合、 比率を保ったままリサイズしたかっ ... 
- 
					
													  
- 
					PHPで一括出力ではなく、ひとつずつ順次に出力する方法PHPで重たい処理とかをしている際に、途中報告みたいな形で順次出力させる方法のメ ...