【问题标题】:Php, Spl, ArrayObject, ArrayObject::STD_PROP_LISTPhp、Spl、ArrayObject、ArrayObject::STD_PROP_LIST
【发布时间】:2012-09-13 11:03:35
【问题描述】:

我正在尝试理解 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 元素,谢谢大家,祝你有美好的一天。

【问题讨论】:

  • 您的代码对我有用。两个 var_dump 看起来都一样:phpfiddle.org/main/code/7x3-dkd
  • 我可以重现它,PHP 5.3.3-1ubuntu9.10。 print_r 和 count() 有效,但 var_dump 无效
  • 谢谢大家的回答,我使用的是 PHP 版本 5.4.3,但可以说它是一个错误,STD_PROP_LIST 的手动定义中提到的正常功能是什么,如果有人可以解释请给我。

标签: php spl arrayobject


【解决方案1】:

我确定你正在使用任何东西

    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 版本

【讨论】:

  • 标志的行为应该只影响属性的可读/可写方式,所以这可能是一个错误。
猜你喜欢
  • 2013-01-14
  • 1970-01-01
  • 2010-11-26
  • 2015-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-12
  • 2011-11-07
相关资源
最近更新 更多