get_object_vars($obj)
和(array) $obj
之间是否存在差异?
两者似乎都返回了对象的公共属性。
哪个更好?
答案 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。