2010-03-24 83 views

回答

41

这并不完全正确。

get_object_vars范围是敏感的,将返回所有可见性能以外静态性质不论其visbility的。如果你从课外来电话,你只会得到公众成员;从派生类中,您将获得受保护的和公共成员;并从课堂本身,你会得到所有的成员。数组键表示属性名称,并且没有被损坏。

(array)强制返回,至少在PHP 5.3.0上返回所有对象属性public和other。

  • public:属性的名称是根据其保护级别错位不缺胳膊少腿,相同属性名称
  • protected:物业键名始于一个*
  • private:物业键名以类名开头

请参阅casting to an array了解更多信息。

我希望你能更好地理解哪一个最适合你的情况。

+7

对于'(array)'强制类型,为私有成员添加'*',私有成员的* classname *将被包含在空字节('\ x00')中,所以严格来说就是'\ x00 * \ x00 '对于受保护的成员,对于私人成员也是如此:'\ x00className \ x00'。相关:** [数组到对象和数组在PHP中 - 有趣的行为](http://stackoverflow.com/questions/6325447/array-to-object-and-object-to-array-in-php-interesting -behaviour/6325631#6325631)** – hakre 2011-07-09 09:33:48

+1

另一个区别(至少在PHP 5中):使用'get_object_vars',如果键是数字,键将被转换为int,其中cast会返回字符串索引:https://3v4l.org/ 2Wb9j – Sherbrow 2016-08-30 15:24:03

2

get_object_vars()函数是实现所需效果的更清晰的方法。尽管将它转换为数组也是一种解决方案,但在更高版本的PHP中,此行为可能会发生变化。

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

+2

为什么数组的性能不如函数可靠?你有支持它的文档吗? – zneak 2010-03-24 23:50:57

1

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