为什么我不能通过索引$obj->property[0]
访问数组,但可以遍历数组(每个只有一个值),然后获得值。
foreach($obj->property as $inner_obj){Foreach ($inner_obj->属性为$inner_inner_obj)echo $ inner_inner_obj ->财产;} 之前如果我通过索引访问数组,我得到
Undefined offset: 0
Edit: Output of var_dump
<>前数组(1){[0]=> object(FooClass)#141 {//等等等等}}
如果你通过implements
Countable, Iterator
制作类,你可以制作一个与foreach
一起工作的对象,但它不是数组
$obj
不是其stdClass Object
和
因为$obj->property[0]
会显示Undefined offset: 0
尝试像这样使用它来获取property
$obj->property->property;
因为你在foreach中循环数组的属性。对于[0],您显式地尝试将其作为数组访问。你可以让你的对象扩展ArrayObject,让php访问你的对象作为一个数组,我认为这是你想要的。
提供将对象用作数组的能力的接口:
http://www.php.net/manual/en/class.arrayaccess.php
http://www.php.net/manual/en/class.countable.php
http://www.php.net/manual/en/class.iteratoraggregate.php
可以扩展的对象本身:
http://www.php.net/manual/en/class.arrayobject.php
在我看来,在没有数组接口的对象上循环从来都不是一个好主意,因为这意味着你正在使用公共变量。我的建议是总是使它们受到保护或私有,除非不可能(SOAP?)。你可以通过getter和setter来访问它们
$obj->property
可以是一个没有键0
的数组。数组中的键可能不是数字。所以你的数组可能是一个关联数组,而不是一个常规数组。如果你想要数字索引,可以这样做:
$numArray = array_values($obj->property);
var_dump($numArray);
如果你想访问数组的第一个值,使用:
$first = reset($obj->property);
如果你的变量是array
,