質問: Warningについて質問です。php.logに以下のワーニングが出力されます。 簡単に回避できる方法はありますか? get_class() expects parameter 1 to be object, string given in ...
回答: addメソッドを呼ぶ際に、引数にインスタンス以外を与えている。 $hoge->add('Msg'); 本来はMsgクラスのインスタンスを渡す。 $hoge->add(new Msg); しかし、nullや、get_class関数でチェックするよりも、 タイプヒンティングを使用した方が良い。 また、エラーコード をaddするという感覚も、 code[0] と0を指定する意味もよく分からない。 ---- code[0]; } } // ----- try { $msg = new Msg; $msg->code[0] = 999; $hg = new Hoge; $hg->add($msg); } catch (ErrorException $e) { die($e->getMessage()); } ------ if ($objMsg != null) で、$objMsgがnullではないので通過する。 しかし、$objMsgがMsgインスタンスであるかはチェックされていない。 なので、 if ( get_class($objMsg) == 'Msg' ) でget_classにMsgインスタンス以外のものが 渡されたので、ワーニングが発生した。 補足をみると、addメソッドには、MsgインスタンスとStringを渡す事が出来る様になっているが、 この様にあいまいな引数を許容している事が、事態を複雑にしている元凶。 タイプヒンティングでadd内に入る前に止めておく。 add()する時、Msgインスタンス以外を与えているなら、それも修正する。 if ( is_string($objMsg) ) { $orgMsg = new Msg(null, null, null, $objMsg); なぜ$objMsgがStringだとnew Msgするのか、 $this->_arrMsg['err'][] = $orgMsg; なぜメッセージを持っていないものを、$_arrMsg['err'] に入れるのか分からない。