勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

PHP8系で「Uncaught TypeError: Unsupported operand types」エラー対応方法

  PHP

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);
?>

これ気を付けないと間違えてしまいそうなので気を付ける。

 - PHP

  関連記事

SortableJSを使ってデータの並べ替え&保存
SortableJSを使ってデータの並べ替え&保存

あるシステムを拝見した際にtableタグ内に並んでいる項目をドラッグ&ド ...

Composerで後から別のパッケージを追加する方法と削除する方法
Composerで後から別のパッケージを追加する方法と削除する方法

Composerで何らかのパッケージをインストールし、後から別のパッケージを追加 ...

フォームからアップロードした画像にPHPで任意のテキストを追加する方法
フォームからアップロードした画像にPHPで任意のテキストを追加する方法

以前フォームから送られてきた画像に対してサイトロゴみたいなロゴ画像を追加する記事 ...

php.iniを変更後にApacheを再起動しても反映されない場合の対応方法
php.iniを変更後にApacheを再起動しても反映されない場合の対応方法

先日AlmaLinux8系にChronyをインストールしてサーバの時刻同期を行っ ...

PHPで「Call to undefined function mb_str_split()」エラーの対応方法
PHPで「Call to undefined function mb_str_split()」エラーの対応方法

PHPにて「Fatal error: Uncaught Error: Call ...