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的行为与此标志完全相同。我在这里错过了什么?
发布于 2013-02-16 13:12:22
正如PHP手册中的评论中所述,标志导致属性,而不是数组值在var_dump中可见。
这方面的学分将转到PHP手册中的评论员:
<?php
$a = new ArrayObject(array(), ArrayObject::STD_PROP_LIST);
$a['arr'] = 'array data';
$a->prop = 'prop data';
$b = new ArrayObject();
$b['arr'] = 'array data';
$b->prop = 'prop data';
// ArrayObject Object
// (
// [prop] => prop data
// )
print_r($a);
// ArrayObject Object
// (
// [arr] => array data
// )
print_r($b);
?>这种行为可能在PHP的从不版本中改变,因为我的PHP版本(5.4.6)总是同时显示:属性和数组值:
ArrayObject Object
(
[prop] => prop data
[storage:ArrayObject:private] => Array
(
[arr] => array data
)
)
ArrayObject Object
(
[prop] => prop data
[storage:ArrayObject:private] => Array
(
[arr] => array data
)
)https://stackoverflow.com/questions/14910599
复制相似问题