PHP のコンストラクターには、次のように文書化されArrayIteratorてArrayObjectいるflagsパラメーターがあります。ArrayObject::setFlags()
ArrayObject::STD_PROP_LISTオブジェクトのプロパティは、リスト (var_dump、foreach など) としてアクセスした場合、通常の機能を持ちます。
ArrayObject::ARRAY_AS_PROPSエントリはプロパティとしてアクセスできます (読み取りおよび書き込み)。
ArrayIterator::setFlags() のドキュメントも同様です (違いは間違いです)。
これで、2 番目のフラグをよく理解できました。これにより、プロパティ アクセスと->配列アクセスが可能になり[]ます。
$a = new ArrayIterator(array('foo'=>1), ArrayObject::ARRAY_AS_PROPS);
var_dump($a['foo']);
var_dump($a->foo);
int(1)
int(1)
しかし、私は頭を包むことができませんArrayObject::STD_PROP_LIST。私がテストした限り、このフラグの有無にかかわらずまったく同じように動作しますvar_dump。foreachここで何が欠けていますか?