web-dev-qa-db-ja.com

get_object_vars()と配列へのキャスト

get_object_vars($obj)(array) $objの間に違いはありますか?

どちらもオブジェクトのパブリックプロパティを返すようです。

どちらが良いですか?

38
scribu

これは正確には当てはまりません。

get_object_varsはスコープ依存であり、可視性に関係なくstaticプロパティを除くすべてのvisibleプロパティを返します。クラスの外部から呼び出すと、パブリックメンバーのみが取得されます。派生クラスから、保護されたメンバーとパブリックメンバーを取得します。クラス自体から、すべてのメンバーを取得します。配列キーはプロパティ名を表し、マングルされません。

(array)キャストは、少なくともPHP 5.3.0では、すべてのオブジェクトプロパティ(パブリックおよびそれ以外)を返します。プロパティの名前は、保護レベルに応じてマングルされます。

  • public:マングルされていない、プロパティ名と同じ
  • protected:プロパティのキー名は*で始まります
  • private:プロパティのキー名はクラスの名前で始まります

詳細については、 配列へのキャスト を参照してください。

どちらがあなたの状況に最も適しているかをよりよく理解できるようになれば幸いです。

48
zneak

get_object_vars()関数は、目的の効果を実現するためのより明確な方法です。それを配列にキャストすることも解決策ですが、この動作はPHPの以降のバージョンで変更される可能性があります。

2つの方法に実際の違いがあるかどうかはわかりませんが、上記の引数によって関数が使用されます。

2
Andre

あなたが実際に必要なものはより良いです。 get_object_vars()は、プライベートおよび保護されたメンバーを表示しません。例については、マニュアルの このコメント を参照してください。

2
fuxia