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
行为都完全相同。我在这里想念什么?