2012-09-13 47 views
1

我想了解ArrayObject::STD_PROP_LIST常量, 因为它在手册中规定:当为列表访问的对象的PHP,SPL,ArrayObject的,ArrayObject的:: STD_PROP_LIST

属性有其正常的功能( var_dump,foreach等)。

我写这篇文章的代码:

$array = array(5,7,9,3,6,5,4); 
$arrayObj = new ArrayObject($array); 
var_dump($arrayObj); 
$arrayObj2 = new ArrayObject($arrayObj->getArrayCopy(), ArrayObject::STD_PROP_LIST); 
var_dump($arrayObj2); 

在第一次的var_dump我们可以看到数组中的元素,但在第二次的var_dump你不能看到他们,我还测试的foreach和两个foreach循环工作arrayObj对象和arrayObj2对象。

如果能有人请向我解释什么是正常的功能,为什么第二个要素的var_dump没有呈现,谢谢大家,有一个愉快的一天。

+0

你的代码对我的作品的版本。既var_dumps看起来是一样的:http://www.phpfiddle.org/main/code/7x3-dkd –

+0

我可以重现它,PHP 5.3.3-1ubuntu9.10。的print_r和count()的作品,但不是的var_dump –

+0

谢谢大家对你的答案,我使用的PHP版本5.4.3,但可以说,它的一个bug,什么能源部为处于STD_PROP_LIST手动定义中提到,如果有一个人正常功能请向我解释一下。 –

回答

2

知道你在使用什么< = PHP版本5.3.8 ..它的错误也发现,你会得到以下

object(ArrayObject)#1 (7) { [0]=> int(5) [1]=> int(7) [2]=> int(9) [3]=> int(3) [4]=> int(6) [5]=> int(5) [6]=> int(4) } 
    object(ArrayObject)#2 (0) { } 

如果您在PHP 5.3.10运行,你会得到以下

object(ArrayObject)#1 (1) { ["storage":"ArrayObject":private]=> array(7) { [0]=> int(5) [1]=> int(7) [2]=> int(9) [3]=> int(3) [4]=> int(6) [5]=> int(5) [6]=> int(4) } } 
    object(ArrayObject)#2 (1) { ["storage":"ArrayObject":private]=> array(7) { [0]=> int(5) [1]=> int(7) [2]=> int(9) [3]=> int(3) [4]=> int(6) [5]=> int(5) [6]=> int(4) } } 

我想你应该升级你的PHP

+1

我认为你是对的:-) –

+0

标志应该只影响性能的方法是可读/写的行为,因此这可能是一个错误。 –