ArrayAccessを実装したインスタンスとarray_key_exists()
自分メモ。
ArrayAccessを実装したクラスのインスタンスに
<?php //$objは instanceof ArrayAccess array_key_exists('key', $obj);
は使えない。
<?php isset($obj['key']);
を使うこと。
おそらく、配列のキーと、オブジェクトのプロパティの違いで動かないんだろうね。
ちょっと不便な気もするけど。
まぁarray_key_exists()自体、isset()で代用効くのであまり使わないからいいか。
array_key_exists()だけじゃなく、他の「キーを引数に指定する」ような配列関数もだめかもね。試してないけど。
ちなみになんでこれに気づいたかというと、DoctrineのDoctrine_Recordクラスのインスタンスを扱っていて。
Doctrine_Recordのインスタンスのまま使用するときと、連想配列にhydrateする時を
透過的に扱おうとして、array_key_exists()の結果が違ってびびったのでありました。