get_object_vars()与强制转换为数组

时间:2010-03-24 23:33:07

标签: php arrays object casting properties

get_object_vars($obj)(array) $obj之间是否存在差异?

两者似乎都返回了对象的公共属性。

哪个更好?

3 个答案:

答案 0 :(得分:46)

这不完全正确。

get_object_vars是范围敏感的,除了静态属性外,它们将返回所有可见属性,无论其可见性如何。如果你从课外打电话,你只会得到公众成员;从派生类中,您将获得受保护和公共成员;从班级本身,你将获得所有成员。数组键表示属性名称,不会被修改。

(array)强制转换,至少在PHP 5.3.0上,返回所有对象属性,public和otherwise。根据保护级别对属性的名称进行修改:

  • public:没有损坏,与财产名称相同
  • protected:属性的键名以*
  • 开头
  • private:属性的键名以类的名称开头

有关更多信息,请参阅casting to an array

我希望你能够更好地了解哪一种最适合你的情况。

答案 1 :(得分:2)

get_object_vars()功能是一种更清晰的方法,可以达到您想要的效果。虽然将它转换为数组也是一种解决方案,但这种行为可能会在PHP的更高版本中发生变化。

我不知道两种方法之间是否存在实际差异,但上述参数会导致我使用该函数。

答案 2 :(得分:2)

更好的是你真正需要的是什么。 get_object_vars()不显示私有成员和受保护成员。有关示例,请参阅手册中的this comment