オブジェクトphpのすべてのプロパティをループする


84

オブジェクトのすべてのプロパティをループするにはどうすればよいですか?今、私はオブジェクトの各プロパティを印刷するために新しいコード行を書かなければなりません

echo $obj->name;
echo $obj->age;

foreachループまたは任意のループを使用してオブジェクトのすべてのプロパティをループできますか?

このようなもの

foreach ($obj as $property => $value)  

1
foreachあなたが正しくやっているループで頭を下げてください
Shakti Singh

6
foreach(with =>not ->)を使用して、オブジェクトのパブリックプロパティを反復処理します。別の動作が必要な場合は、クラスをトラバース可能にすることもできます。
netcoder 2011

@netcoder:タイプミスだけだったおかげではなく
Daric

2
ネットコーダーが言ったように:公共の財産だけがアクセス可能になります
アンドレアス

回答:


139

これが出力のデバッグのみを目的としている場合は、以下を使用してすべてのタイプと値を確認することもできます。

var_dump($obj);

出力をより細かく制御したい場合は、これを使用できます。

foreach ($obj as $key => $value) {
    echo "$key => $value\n";
}

9
オブジェクトが配列でない場合、「クラスstdClassのオブジェクトを文字列に変換できませんでした」というエラーが発生する可能性があります。
着陸

print_r($ obj); また助けることができます。指定されたオブジェクトのフィールドを再帰的に出力します。
ファンダソン2017

8

テストの目的で、私は以下を使用します。

//return assoc array when called from outside the class it will only contain public properties and values 
var_dump(get_object_vars($obj)); 

1

オブジェクトプロパティを表現する別の方法があります。

foreach ($obj as $key=>$value) {
    echo "$key => $obj[$key]\n";
}

2
これは、オブジェクトが実装あれば働く\ArrayAccessかであるarray、そうでない場合は次のことがスローされますFATAL ERROR Uncaught Error: Cannot use object of type SomeType as array
NoodleOfDeath

1

場合によっては、デバッグ目的ではなく、オブジェクトの変数をリストする必要があります。それを行う正しい方法は、get_object_vars($ object)を使用することです。すべてのクラス変数とその値を含む配列を返します。次に、foreachループでそれらをループできます。オブジェクト自体の中で使用する場合は、get_object_vars($ this)を実行するだけです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.