ArrayObjectと多次元配列とisset
<?php error_reporting( E_ALL ); $ary = array(); if ( isset($ary['foo']['bar']) ) {}
は警告は出ないが
<?php error_reporting( E_ALL ); $ary = new ArrayObject(); // Notice: Undefined index: foo if ( isset($ary['foo']['bar']) ) {}
は警告が出る。
ArrayObjectの場合、あくまでも配列っぽい動きをエミュレートしてるだけなので上記のような多次元の配列に対してissetをしてもArrayObject::offsetGetの時点で警告が出てしまう。
回避方法はぶっちゃけ無くて地道に
<?php error_reporting( E_ALL ); $ary = new ArrayObject(); if ( isset($ary['foo']) && isset($ary['foo']['bar']) ) {}
としなければならないっぽい。
楽するために使ってるArrayObjectのはずなのに、楽じゃなくなってる謎。