2013-02-16 23 views
2

PHP的ArrayIteratorArrayObject的構造具有在ArrayObject::setFlags()記錄了flags參數如下:當爲列表(的var_dump,的foreach訪問的對象的ArrayIterator和ArrayObject的flags參數有什麼作用?

ArrayObject::STD_PROP_LIST

屬性有其正常的功能等)。

ArrayObject::ARRAY_AS_PROPS

條目可以作爲屬性(讀取和寫入)進行訪問。

ArrayIterator :: setFlags()的文檔類似(the difference being difference erroneous)。

現在,我明白了第二個標誌相當不錯,它允許->屬性訪問以及數組訪問與[]

$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_dumpforeach表現完全相同,有或沒有這個標誌。我在這裏錯過了什麼?

回答

1

正如在PHP手冊中的the comments所述,該標誌會導致屬性,而不是數組值在var_dump中可見。

學分此去the commenter 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 
     ) 

) 
+0

那麼,這個標記現在是沒有意義的了?感謝您指出ArrayObject的註釋部分,我只查看了特定方法的註釋。 – 2013-02-16 13:17:08

+0

@fab您應該親自檢查引用的代碼,以確定這是否也適用於您。 – TimWolla 2013-02-16 13:17:47

+1

我在PHP 5.4和5.3上試了一下,得到了和你一樣的行爲。而且,「foreach」總是忽略這些屬性。 – 2013-02-16 13:20:18

相關問題