get_object_vars($obj)
と(array) $obj
の間に違いはありますか?
どちらもオブジェクトのパブリックプロパティを返すようです。
どちらが良いですか?
これは正確には当てはまりません。
get_object_vars
はスコープ依存であり、可視性に関係なくstaticプロパティを除くすべてのvisibleプロパティを返します。クラスの外部から呼び出すと、パブリックメンバーのみが取得されます。派生クラスから、保護されたメンバーとパブリックメンバーを取得します。クラス自体から、すべてのメンバーを取得します。配列キーはプロパティ名を表し、マングルされません。
(array)
キャストは、少なくともPHP 5.3.0では、すべてのオブジェクトプロパティ(パブリックおよびそれ以外)を返します。プロパティの名前は、保護レベルに応じてマングルされます。
public
:マングルされていない、プロパティ名と同じprotected
:プロパティのキー名は*
で始まりますprivate
:プロパティのキー名はクラスの名前で始まります詳細については、 配列へのキャスト を参照してください。
どちらがあなたの状況に最も適しているかをよりよく理解できるようになれば幸いです。
get_object_vars()
関数は、目的の効果を実現するためのより明確な方法です。それを配列にキャストすることも解決策ですが、この動作はPHPの以降のバージョンで変更される可能性があります。
2つの方法に実際の違いがあるかどうかはわかりませんが、上記の引数によって関数が使用されます。
あなたが実際に必要なものはより良いです。 get_object_vars()は、プライベートおよび保護されたメンバーを表示しません。例については、マニュアルの このコメント を参照してください。