[PHP] PHP Fatal error: Unsupported operand types

Read More



配列と配列をマージするところでこんなエラーが出てた。
PHP Fatal error: Unsupported operand types
えーと、訳すとサポートしていないオペランドの型です?

結論を先に書くとこれは、配列と配列でないものをマージしようとしたことがfatal errorとなった原因だった。



マージに失敗していた部分を簡単に書くとこんな感じ。
$form = \Input::get();
$up_form = \Model\Guarantee::get_session('up_form');
$form += $up_form;

セッションの値がまだセットされていない状態でフォームのデータを取得しようとするとnullが返ってくる。
なるほど、エラーになるわけで。



この解決方法はぱっと下記のものを思いつく。
1.get_session()で取得した値をarray型にキャストする
2.get_session()で取得した値に対しis_array()でチェックをかける




まずは1の方法。
■get_session()で取得した値を型キャストする
$form = \Input::get();
$up_form = (array)\Model\Guarantee::get_session('up_form');
$form += $up_form;

戻り値を強制的にarray型にキャストする。



続いて2の方法。
■get_session()で取得した値に対しis_array()でチェックをかける
$form = \Input::get();
$up_form = \Model\Guarantee::get_session('up_form');
if(is_array($up_form)
{
  $form += $up_form;
}

マージする直前でif文で配列かチェックする。



メソッドの戻り値は人によってまちまちだったりする。
メソッド内でどんな時も必ず配列になるように書く人もいれば、取得対象となる値が存在しない場合はnullやfalseで返すような人もいる。
そう考えるとたぶん2の方法を取るのがベターと思われる。






-- 2019/03/13 追記:
ちなみにarray_merge()はあと勝ち、+=は先勝ちの違いがある。
ついでにいうと添え字が数値だった場合array_merge()は上書きされるが+=は添え字の数値が増えて上書きされない。









コメント投稿

名前 *
(10文字以内)
コメント *
(1000文字以内)