访问嵌套对象数组

时间:2012-02-22 18:15:22

标签: php oop object

嘿伙计我似乎无法在这里获得语法,我只是想看看是否存在类型, 我试过了

if($obj->type)    /* do something */
if($obj[0]->type) /* do something */
if($obj->type[0]) /* do something */

在此

stdClass::__set_state(
array(
   '0' => 
  stdClass::__set_state(
  array(
     'report_number' => '555',
     'type' => 'citrus',
     'region' => 'Seattle',
     'customer_number' => '9757',
     'customer' => 'The Name',
     'location' => 'West Seattle, WA',
     'shipper' => 'Yamato Transport',
     'po' => '33215',
     'commodity' => 'RARE',
     'label' => 'PRODUCE',
  )),
))

但似乎无法做到正确,我相信这与它有关 [0]是一个int而不是varchar,但我不知道......

2 个答案:

答案 0 :(得分:7)

问题中的输出由var_export创建,它将对象的数据表示为array。但是不要误导,它实际上是一个对象。

通过以下语法访问对象属性:

$obj->property

在你的情况下,该属性被命名为0,PHP很难用普通代码处理,因为它不是你可以立即写的属性名称,如下所示:

$obj->0

相反,您需要通过将其封装到{}中来告诉PHP解析器名称是什么:

$obj->{0}

然后,您可以进一步遍历以访问type的{​​{1}}属性:

0

希望这会有所帮助,这个问题会不时出现,这是一个相关的链接:How do I access this object property?

PHP手册记录了这一点,但在Variable variables entry

中并不是很明显
  

为了将变量变量与数组一起使用,您必须解决模糊问题。也就是说,如果您编写$obj->{0}->type ,则解析器需要知道您是否打算将$$a[1]用作变量,或者您希望$a[1]作为变量然后$$a来自该变量的索引。解决这种歧义的语法是:第一种情况为[1],第二种情况为${$a[1]}

答案 1 :(得分:0)

你试过了吗?

<?php
    if (property_exists($obj, 'type')) { 
        // Do something 
    }
?>