遭遇したエラー

1Fatal error: Uncaught Error: Unsupported operand types in /path/to/file.php:13
2Stack trace:
3#0 {main}
4  thrown in /path/to/file.php on line 13

Fatal つまり、 致命的なエラー であり、そこで処理が止まってしまいます。

これはまずいですん。

エラーの意味と原因

Unsupported operand types を翻訳すると「 サポートされていないオペランドの種類 」です。

この耳慣れない オペランド (operand ) という単語がキモですね。


オペランドとは「被演算子」のことです。

プログラムの式は

1$a + $b;

のように書きますが、これを言い換えるとこうなります。

1オペランド 演算子 オペランド;

ここから Unsupported operand types というエラーは、式のオペランド同士の組み合わせが良くない、ということがわかります。

問題の PHP コードと、やりたかったこと

このエラーを出したプログラムはこうです。

 1<?php
 2// 配列を作る
 3$nums = [
 4  1,
 5  5,
 6  9,
 7  13,
 8  17,
 9];
10
11// 配列の各要素を加算する
12for ($n = 0; $n < 5; $n++) {
13    $nums += $n;
14}

プログラムの目的は 「配列の各要素を加算して、合計を求める」ですが、上のプログラムはいろいろ良くないですね。


Unsupported operand types が発生した行は次です。

1$nums += $n;

この式を見ると、オペランドが次になっています。

  • $numsarray
  • $nint

つまり arrayint+ で演算しようとしたが、型が異なっていて処理できなかったのですね。


プログラムのバグを治すと次となります。

 1<?php
 2// 配列を作る
 3for($i = 0; $i < 5; $i++) {
 4    $nums[] = $i;
 5}
 6
 7// 配列の各要素を加算する
 8$total = 0;
 9for($j = 0; $j < count($nums); $j++) {
10    $total += $nums[$j];
11}

$total という int の変数を宣言し、同じく int である各配列の要素を加算しています。

これは intint+ で加算しており、問題なく処理できる、という感じです。


エラーが出た、わけわからん

となる前に、少し落ち着いてコードを読み直す、というのが最初は重要だったりします。