首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ArrayIterator和ArrayObject的标志参数是什么?

ArrayIterator和ArrayObject的标志参数是什么?
EN

Stack Overflow用户
提问于 2013-02-16 13:03:00
回答 1查看 695关注 0票数 2

PHP的ArrayIteratorArrayObject的构造函数有一个flags参数,在ArrayObject::setFlags()中有如下描述:

ArrayObject::STD_PROP_LIST 对象的属性在以列表的形式访问时具有正常的功能(var_dump、foreach等)。 ArrayObject::ARRAY_AS_PROPS 条目可以作为属性访问(读和写)。

ArrayIterator::setFlags()的文档类似(差异是错误的)。

现在,我很好地理解了第二个标志,它允许使用->访问属性,也允许使用[]访问数组。

代码语言:javascript
复制
$a = new ArrayIterator(array('foo'=>1), ArrayObject::ARRAY_AS_PROPS);
var_dump($a['foo']);
var_dump($a->foo);
代码语言:javascript
复制
int(1)
int(1)

但我不能把我的头绕在ArrayObject::STD_PROP_LIST身上。就我测试的情况而言,var_dumpforeach的行为与此标志完全相同。我在这里错过了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-16 13:12:22

正如PHP手册中的评论中所述,标志导致属性,而不是数组值在var_dump中可见。

这方面的学分将转到PHP手册中的评论员

代码语言:javascript
复制
<?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)总是同时显示:属性和数组值:

代码语言:javascript
复制
ArrayObject Object
(
    [prop] => prop data
    [storage:ArrayObject:private] => Array
        (
            [arr] => array data
        )

)
ArrayObject Object
(
    [prop] => prop data
    [storage:ArrayObject:private] => Array
        (
            [arr] => array data
        )

)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14910599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档