PHP 的构造函数ArrayIterator有ArrayObject一个flags参数,记录ArrayObject::setFlags()如下:
ArrayObject::STD_PROP_LIST当作为列表(var_dump、foreach 等)访问时,对象的属性具有它们的正常功能。
ArrayObject::ARRAY_AS_PROPS条目可以作为属性访问(读取和写入)。
ArrayIterator::setFlags() 的文档是相似的(区别在于差异错误)。
现在,我很好地理解了第二个标志,它允许通过以下方式访问属性->以及通过以下方式访问数组[]:
$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行为都完全相同。我在这里想念什么?