Fri*_*urf 22 php spl arrayobject
我试图在文档中理解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);
Run Code Online (Sandbox Code Playgroud)
两种印刷品都给我相同的结果:
ArrayObject Object ( [prop] => prop data [storage:ArrayObject:private] => Array ( [arr] => array data ) )
ArrayObject Object ( [prop] => prop data [storage:ArrayObject:private] => Array ( [arr] => array data ) )
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮我理解使用这个常数之间的区别是什么?
提前致谢!
Jay*_*aph 68
的ArrayObject和ArrayIterator是2类,真的相似.它们实际上都在php核心内部共享大量代码.这两个类有一个内部数组,用于存储您为这些类设置的元素.
将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
)
)
Run Code Online (Sandbox Code Playgroud)
在STD_PROP_LIST什么返回在一定条件下,最显着的决定var_dump().虽然还有其他案例,但我自己并没有找到它们.如果STD_PROP_LIST设置了,它将返回已设置到您ArrayObject或ArrayIterator类上的属性.如果未设置,则var_dump()返回已存储的内部元素的列表.
实际文档并非100%正确STD_PROP_LIST.这个标志影响var_dump()但不影响foreach().使用时foreach(),它将始终迭代内部元素,而不是实际属性,即使STD_PROP_LIST已经设置.
这两个标志不是互斥的:你可以设置两个标志,但这样做没有多大意义:它意味着属性总是作为内部元素添加(ARRAY_AS_PROPS),我们希望通过var_dump(STD_PROP_LIST)返回标准属性.由于无法设置属性,因此在这种情况下它将始终返回空列表.
| 归档时间: |
|
| 查看次数: |
11104 次 |
| 最近记录: |