読者です 読者をやめる 読者になる 読者になる

ありがとう。また会おう。

まぁゆるりとやっていきますよと。

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()の結果が違ってびびったのでありました。