我试图理解文档中的 STD_PROP_LIST 常量,但到目前为止我不理解它,也没有找到任何解释:(
该文档有以下示例:
$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);
两种打印都给了我完全相同的结果:
ArrayObject Object ( [prop] => prop data [storage:ArrayObject:private] => Array ( [arr] => array data ) )
ArrayObject Object ( [prop] => prop data [storage:ArrayObject:private] => Array ( [arr] => array data ) )
任何人都可以帮助我理解使用这个常量与不使用这个常量有什么区别?
提前致谢!
The ArrayObject
and ArrayIterator
是两个非常相似的类。实际上,它们都在 php 核心内部共享大量代码。这两个类有一个内部数组来存储您为这些类设置的元素。
The STD_PROP_LIST
告诉我们如何阅读,以及ARRAY_AS_PROPS
告诉我们如何编写这些元素。首先,通过标准数组设置元素([]
) 表示法始终以相同的方式工作,无论这些设置如何。
设置时ARRAY_AS_PROPS
标志,这意味着当您设置属性时(通过->
),不会像您期望的常规对象那样在对象上设置,而是将存储为内部元素。如果未设置此标志,它将将该属性存储到实际的数组对象或数组迭代器上,这就是您在示例的代码输出中看到的内容:“prop => propdata
“ 不在里面storage:ArrayObject:private
,如果ARRAY_AS_PROPS
标志将被设置:
$a = new ArrayObject();
$a['arr'] = 'array data';
$a->prop = 'prop data';
$b = new ArrayObject(array(), ArrayObject::ARRAY_AS_PROPS);
$b['arr'] = 'array data';
$b->prop = 'prop data';
print_r($a);
print_r($b);
// Output:
ArrayObject Object
(
[prop] => prop data
[storage:ArrayObject:private] => Array
(
[arr] => array data
)
)
ArrayObject Object
(
[storage:ArrayObject:private] => Array
(
[arr] => array data
[prop] => prop data
)
)
The STD_PROP_LIST
决定在某些条件下返回什么,尤其是在var_dump()
。虽然还会有其他情况,但我自己还没有发现。如果STD_PROP_LIST
设置后,它将返回已设置到您的属性ArrayObject
, or ArrayIterator
班级。如果未设置,则var_dump()
将返回已存储的内部元素的列表。
实际文档并非 100% 正确STD_PROP_LIST
。该标志影响var_dump()
, 但不是foreach()
。使用时foreach()
,它总是会迭代内部元素,而不是实际属性,即使当STD_PROP_LIST
已经设置好了。
这两个标志并不相互排斥:您可以设置这两个标志,但这样做没有多大意义:这意味着属性始终作为内部元素添加(ARRAY_AS_PROPS
),我们想通过返回标准属性var_dump
(STD_PROP_LIST
)。由于无法设置属性,因此在这种情况下它将始终返回空列表。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)