質問: phpとsqlについて質問です。 配列の話です。 10行目と11行目の話です。 前から疑問だったんですが、10行目のような書き方は変数を初期化する時の書き方のはずなのにどうして配列として処理できるんですか? また、どうしてこの1行で配列内に全ての要素を1から順に入れられるんでしょうか? queryはそういうメソッドなのですか? 11行目からのforeachが思い通りに動いた(エラーにならなかったの)で疑問に思いました。
回答: >10行目のような書き方は変数を初期化する時の書き方のはず いいえ。PDOオブジェクトに対してqueryメソッドを実行して(その返り値である)PDOStatementオブジェクトを $i に格納しているだけです。 #それを「初期化」と呼ぶことはありません(汗 そして、PDOStatementオブジェクトは Traversable なので、foreach で順次処理することができます(「配列」としてforeachで回しているのではありません)。 また、$i という変数を介さずに、直接 foreach ($pdo->query('select * from product') as $row) と書くこともできます。 (蛇足) 提示されたソースでは、PDO接続のエラーモードの設定がされていません。エラーモードを PDO::ERRMODE_EXCEPTION にセットして try ~ catch構文で括るのが一般的だろうと思います。 またPDO接続のインスタンス生成(接続)に失敗したときには(当然エラーモード設定前)必ず例外が生成される仕様になっています。最低でもインスタンス生成は try ~ catch構文で括らないといけません。でないと接続が確立されないまま、以降の(接続を前提とした)処理が走ってしまいます。