文字列同士に + を使うと TypeError になる(. との違い)
PHPの文字列連結演算子は . (ピリオド)です。+は数値の加算専用で、数値として解釈できない文字列に対して使うとTypeErrorになります。
エラーメッセージの読み方
Fatal error: Uncaught TypeError: Unsupported operand types: string + string in main.php:4
main.php- ファイル名
4- 行番号 — 実際にクラッシュした行
TypeError- 例外クラス — 何が起きたか。ここを検索するのが最短です
Unsupported operand types: string + string- 内容 — どの値が問題だったか
このエラーが出る典型パターン
パターン1
1 <?php 2 $greeting = "Hello"; 3 $name = "world"; 4 echo $greeting + $name; ^
Fatal error: Uncaught TypeError: Unsupported operand types: string + string in main.php:4
PHPの+は数値の加算専用です。文字列同士を連結したい場合は . を使う必要があります。
直し方: + を . にします。
広告
広告スロット(未設定)
パターン2
1 <?php 2 $first = "foo"; 3 $second = "bar"; 4 echo $first + $second; ^
Fatal error: Uncaught TypeError: Unsupported operand types: string + string in main.php:4
文字列同士に+を使うとTypeErrorになります。連結には.を使います。
直し方: + を . にします。
パターン3
1 <?php 2 $label = "Price: "; 3 $unit = "yen"; 4 echo $label + $unit; ^
Fatal error: Uncaught TypeError: Unsupported operand types: string + string in main.php:4
labelとunitはどちらも数値に変換できない文字列です。+を使うとTypeErrorになるため.で連結します。
直し方: + を . にします。
パターン4
1 <?php 2 $a = "cat"; 3 $b = "dog"; 4 echo $a + $b; ^
Fatal error: Uncaught TypeError: Unsupported operand types: string + string in main.php:4
PHPの+は数値の加算専用です。文字列同士を連結したい場合は.を使う必要があります。
直し方: + を . にします。
パターン5
1 <?php 2 $prefix = "Mr. "; 3 $name = "Smith"; 4 echo $prefix + $name; ^
Fatal error: Uncaught TypeError: Unsupported operand types: string + string in main.php:4
prefixとnameはどちらも数値に変換できない文字列です。+を使うとTypeErrorになります。
直し方: + を . にします。
よくある誤解
JavaScriptなど他言語の経験から「+は文字列も連結できるはず」と思い込むと、PHPでは通用しません。PHPの+は常に数値演算で、文字列を連結したいなら.を使う必要があります。
実務での勘所
PHPが連結に.を使い、+を数値専用に保っているのは、初期のPHPが大きな影響を受けたPerl言語の慣習を引き継いだためです。この設計により、+は常に「数値としての足し算」だけを意味する記号として一貫させられています。なおPHP 7以前は、数値として解釈できない文字列に+を使っても警告付きで処理が続行されることがありましたが、PHP 8では型の扱いがより厳格になり、はっきりとTypeErrorとして停止するようになりました。