get_object_vars()与强制转换为数组

scr*_*ibu 37 php arrays casting properties object

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

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

哪个更好?

zne*_*eak 48

这不完全正确.

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

(array)投的回报,至少在PHP 5.3.0,所有的对象属性,公众和其他.根据保护级别修改属性的名称:

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

请参阅转换为数组以获取更多信息.

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

  • 要添加,对于`(数组)`强制转换,保护的`*`和私有成员的*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)** (8认同)
  • 另一个区别(至少在PHP 5中是这样):使用get_object_vars键,如果键是数字,则键将转换为int,其中转换返回字符串索引:https://3v4l.org/2Wb9j (2认同)