第10章 オブジェクト指向構文 / 第5回 模擬試験

PHPのオブジェクトの反復処理に関する次の記述のうち、正しいものはどれか。

publicプロパティを持つオブジェクトは、`foreach`で直接プロパティを反復処理できる。 正解
オブジェクトは`foreach`で反復処理することが一切できない。
オブジェクトの反復処理には、必ずデータベース接続が必要である。
オブジェクトを反復処理すると、常にプロパティの値がすべて`null`になる。
解説
`public`なプロパティを持つオブジェクトは、`foreach ($obj as $key => $value)`のように、配列と同じ感覚でプロパティを1つずつ反復処理(`$key`にプロパティ名、`$value`にその値)できます。 他の選択肢が誤りである理由は次の通りです。 ・オブジェクトは`foreach`で反復処理できます。「一切できない」は誤りです。 ・オブジェクトの反復処理自体はPHPの言語機能であり、データベース接続とは無関係です。 ・反復処理で取得できるのは各プロパティの実際の値であり、常に`null`になるわけではありません。 例: ``` class Point { public int $x = 1; public int $y = 2; } foreach (new Point() as $key => $value) { echo "$key: $value "; // x: 1 / y: 2 } ``` なお`private`/`protected`プロパティはこの単純な`foreach`では取得できません。反復処理の挙動を独自に制御したい場合は`Iterator`インターフェイスを実装します。 (参照: 独習PHP 第4版 第10章 オブジェクト指向構文 10.6.3節 オブジェクトの反復処理 p.534〜536)

あわせて読みたい解説記事