get_object_vars() 与强制转换为数组

Posted

技术标签:

【中文标题】get_object_vars() 与强制转换为数组【英文标题】:get_object_vars() vs. cast to array 【发布时间】:2011-01-31 12:24:49 【问题描述】:

get_object_vars($obj)(array) $obj 之间有什么区别吗?

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

哪个更好?

【问题讨论】:

【参考方案1】:

这并不完全正确。

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 另一个区别(至少在 PHP 5 中):get_object_vars 的键如果是数字将被转换为 int,其中转换返回字符串索引:3v4l.org/2Wb9j (array) 的另一个特点是它不会包含 static 属性,无论其可见性如何。【参考方案2】:

get_object_vars() 函数是实现你想要的效果的更清晰的方法。虽然将其转换为数组也是一种解决方案,但这种行为可能会在以后的 PHP 版本中发生变化。

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

【讨论】:

为什么数组转换的行为不如函数可靠?你有支持它的文件吗?【参考方案3】:

更好的是你真正需要的。 get_object_vars() 不显示私有成员和受保护成员。示例见手册中的this comment。

【讨论】:

以上是关于get_object_vars() 与强制转换为数组的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript之类型转换

get_object_vars($object) 返回由对象属性组成的关联数组

csharp 将图像转换为数据网址

将字符串转换为数学方程[重复]

将 Swift 结构转换为数据字节

将字符串转换为数学评估 [关闭]