フリーランス|WEB 制作経験丸7年、制作会社様からのご依頼に丁寧・高クオリティでお手伝いいたします。 IRODORI DESIGN

B L O G

【PHPエラー】Fatal error: Uncaught TypeError: Unsupported operand types…の原因と解決方法

Fatal error: Uncaught TypeError: Unsupported operand types...
PHPエラー
バグ解決
プログラムエラー
解決方法

PHPはWebサイトを構築する際に使用されるプログラミング言語です。
PHPでは何かしら不具合があると処理を止めて英語でエラー文章を表示します。
プログラマはブラウザに表示されているエラーメッセージを手掛かりに原因となるプログラムエラーを修正します。
この記事ではそんなPHPのプログラムエラーの中でも時々見かけるFatal error: Uncaught TypeError: Unsupported operand types...の原因と解決方法をご紹介したいと思います。

Fatal error: Uncaught TypeError: Unsupported operand types…が発生する原因

まずは実際にFatal error: Uncaught TypeError: Unsupported operand types...がどんなふうにエラーメッセージが表示されるか見てみましょう。

PHPのコードを以下のように書くとこのエラーが表示されます。

echo 'あいえうお' + 1;
Fatal error: Uncaught TypeError: Unsupported operand types: string + int in ●●●:■■■ Stack trace: #0 {main} ●●● on line ■■■

もしくは以下のように書くとこのエラーが表示されます。

echo 'あいうえお' + 'かきくけこ';
Fatal error: Uncaught TypeError: Unsupported operand types: string + string in ●●●:■■■ Stack trace: #0 {main} ●●● on line ■■■

2つの違いはエラーメッセージの途中にあるstring + intstring + stringの部分です。

そして、このFatal error: Uncaught TypeError: Unsupported operand types...は以下のような時に発生します。

  • 型の異なる変数や値同士を繋げようとした時
  • 文字列同士を「+」の演算子で繋げようとした時

そしてこのプログラムエラーは

  • ●●●:原因となるファイルがあるサーバーパス
  • ■■■:その記述がある行数

string + intの場合は、「●●●の■■■行目で型の異なる変数、値同士を繋げようとしている」、
string + stringの場合は、「●●●の■■■行目で文字列同士を「+」の演算子で繋げようとしている」

これが原因でこのプログラムエラーが発生しているということが分かります。

Fatal error: Uncaught TypeError: Unsupported operand types…の解決方法

ここからはFatal error: Uncaught TypeError: Unsupported operand types...の解決方法をご紹介します。

上でご紹介した通り、このエラーはstring + intstring + stringの2通りのエラーメッセージがあり、それぞれ解決方法が変わってきます。

string + intの場合

string + intの場合は、その2つが繋げてもいいのかプログラム自体を見直すようにしましょう。
もしかすると自分が思っている値が入ってない、もしくは入らない可能性があるかもしれません。

echo 'あいえうお' + 1;

この例の場合はそもそもこの2つは文字列型と数値型のため繋げることが出来ません。
もし繋げる場合は数字をクォーテーションで囲って数字を文字列として扱い、「.(ドット)」にすることで繋げることが出来ます。

echo 'あいえうお' . '1';

エラーメッセージが表示されることなく処理されるようになりましたね。

string + stringの場合

string + stringの場合は、そもそものPHPの文法の誤りです。PHPで文字列同士を繋げる場合は「+」ではなく「.(ドット)」です。

echo 'abc' + 'def';

この例の場合は以下のように「.(ドット)」を使うことで文字列同士をつなげることが出来ます。

echo 'abc' . 'def';

エラーメッセージが表示されることなく処理されるようになりましたね。

まとめ

いかがでしたか?
Fatal error: Uncaught TypeError: Unsupported operand types...が発生してしまった場合は繋げようとしている型同士が正しいのか再確認するようにしましょう。
思っているのと異なる値が変数の中に格納されている可能性もあります。
このプログラムエラー自体は型の扱いが正しくないため発生しますが、その裏には多くの複雑なプログラムが動いている場合が多いです。
その場合はこの部分だけでなく、他の部分も再度見直す必要があるかもしれません。