get_object_vars返回NULL

时间:2011-09-15 08:41:06

标签: php

这一行:

var_dump($data['department']);

返回:

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

当我尝试

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

我得到了

array
  empty

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

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

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

6 个答案:

答案 0 :(得分:3)

来自手册:

  

获取可访问非静态属性

当你是protected

尝试get_class_vars

答案 1 :(得分:1)

get_object_vars只获取对象的公共属性。因为您只有受保护的属性,所以不会返回任何内容。

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

答案 2 :(得分:0)

这应归功于您的属性的“受保护”可见性。如果将字段更改为“public”,它是否会显示它们?

答案 3 :(得分:0)

这是因为变量受到保护。 get_object_vars只能看到可访问的变量。

请参阅http://php.net/get_object_vars

答案 4 :(得分:0)

get_object_vars仅返回公共属性,以获取可以使用Reflection的受保护属性列表 例子: http://php.net/manual/en/reflectionclass.getproperties.php

答案 5 :(得分:0)

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