【发布时间】:2011-01-31 12:24:49
【问题描述】:
get_object_vars($obj) 和 (array) $obj 之间有什么区别吗?
两者似乎都返回了对象的公共属性。
哪个更好?
【问题讨论】:
标签: php arrays object casting properties
get_object_vars($obj) 和 (array) $obj 之间有什么区别吗?
两者似乎都返回了对象的公共属性。
哪个更好?
【问题讨论】:
标签: php arrays object casting properties
这并不完全正确。
get_object_vars 是范围敏感的,并且将返回所有 可见 属性,除了 静态 属性,无论它们的可见性如何。如果你从课堂外调用它,你只会得到公共成员;从派生类中,您将获得受保护的和公共的成员;从班级本身,你会得到所有的成员。数组键代表属性名称,不会被破坏。
(array) 转换至少在 PHP 5.3.0 上返回所有对象属性,公共的和其他的。属性的名称根据其保护级别进行了修改:
public: 未损坏,与属性名称相同protected:属性的键名以 * 开头
private: 属性的键名以类名开头更多信息请参见casting to an array。
希望您能够更好地了解哪一种最适合您的情况。
【讨论】:
(array) 演员表,* 用于受保护的成员和 classname 用于私有成员将包含在空字节(\x00)中,所以严格来说,受保护成员是\x00*\x00,私有成员也是如此:\x00className\x00。相关:Array to Object and Object to Array in PHP - interesting behaviour
get_object_vars 的键如果是数字将被转换为 int,其中转换返回字符串索引:3v4l.org/2Wb9j
(array) 的另一个特点是它不会包含 static 属性,无论其可见性如何。
get_object_vars() 函数是实现你想要的效果的更清晰的方法。虽然将其转换为数组也是一种解决方案,但这种行为可能会在以后的 PHP 版本中发生变化。
我不知道这两种方法之间是否存在实际差异,但上面的参数会引导我使用该函数。
【讨论】:
更好的是你真正需要的。 get_object_vars() 不显示私有成员和受保护成员。示例见手册中的this comment。
【讨论】: