2010-03-24 88 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