第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)