2011-09-15 30 views
3

这条线:get_object_vars返回NULL

var_dump($data['department']); 

返回此:

object(Penny\HomeBundle\Entity\Department)[1420] 
    protected 'id' => int 37 
    protected 'name' => string 'Support' (length=7) 
    protected 'email' => string '[email protected]' (length=25) 

当我尝试做

var_dump(get_object_vars($data['department'])); 

我得到

array 
    empty 

我不知道为什么会发生这种情况,如果对象在那里。

编辑:我解决了我的问题,使用$ obj-> getValue()方法(getters)。

但问题仍然存在:为什么不会get_object_vars()工作?

回答

3

从手册:

获取访问非静电性能

当你为protected

尝试get_class_vars

+0

也没有工作。 – Tool

0

这应该是由于您的属性的“受保护的”可见性。如果您将字段更改为“公开”,它会显示它们吗?

+0

我不认为我应该这样做,因为我没有生成这个类(Doctrine 2)。但我想如果我把它们公诸于众,它就会奏效。 – Tool

+0

我明白了,很高兴你找到了解决方案。这应该是为什么它不工作的解释。 – Johannes

1

get_object_vars只得到一个对象的公共属性。由于您只有受保护的属性,因此不会返回任何内容

如果您想获得保护,请尝试扩展该类并执行此类中的方法的get_object_vars。

0

事实上,函数只返回公共属性。 解决这个问题的最明智的选择是让公共方法返回类中的get_object_vars并从实例中调用它。 我认为将所有房产设置为公共的过于剧烈的变化。 使用此方法,您没有将属性设置为public,并且您的类设计保持不变。