Your SlideShare is downloading. ×
PHPの教室「foreachを極める」
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

PHPの教室「foreachを極める」

15,799
views

Published on

録画の動画はこちら …

録画の動画はこちら
http://new.livestream.com/shimokitazawa-osscafe/shimokita-php/videos/9891154


1 Comment
48 Likes
Statistics
Notes
No Downloads
Views
Total Views
15,799
On Slideshare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
34
Comments
1
Likes
48
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. PHPの教室 foreachを極める 超頻出する文法を徹底的に掘り尽くす! yando @ Shimokita.php
  • 2. 提供 yando @ Shimokita.php
  • 3. @yando• Yusuke Ando• PHPer• Engine Yard inc.• github.com/yandod/candycane yando @ Shimokita.php
  • 4. おしながき• foreachの基礎• やりがちな失敗• 応用的な書き方 yando @ Shimokita.php
  • 5. 基礎 yando @ Shimokita.php
  • 6. 基本1 元になるデータ $listの数だけ実行 $key にインデックス $valに内容 yando @ Shimokita.php
  • 7. foreach• 超優良ループ構文• 平均的なPHPerは一日に5回は書く• エラーの原因にもなる• いろいろな書き方がある yando @ Shimokita.php
  • 8. We♥foreach• 無限ループしない• たいていのデータが配列• 配列をそのまま流せるので便利• Webアプリは一覧表示が多い yando @ Shimokita.php
  • 9. forとかダルい 無限ループのリスク []などが多い yando @ Shimokita.php
  • 10. while ...無理するなと言いたい yando @ Shimokita.php
  • 11. ひとまず• PHPでループを書くならforeach• 使い方でphper度がわかる• よく使うからこそ重要• 細かい挙動も知っておくべき yando @ Shimokita.php
  • 12. 基本2 元になる連想配列 $listの数だけ実行 $key にキー $valに内容 yando @ Shimokita.php
  • 13. 基本3 元になる連想配列 $listの数だけ実行 $valに内容 キーは無視される yando @ Shimokita.php
  • 14. 基本4 ここからforeach HTMLが書きやすい foreach終了 yando @ Shimokita.php
  • 15. やりがちな失敗 yando @ Shimokita.php
  • 16. 失敗• 配列チェック漏れ• 要素の更新• ループ終了後の変数• 多重foreach yando @ Shimokita.php
  • 17. 配列?• foreachは配列しか回せない• データ取得結果がfalse null String• 処理できない• 空の配列であれば問題ない yando @ Shimokita.php
  • 18. 失敗1 関数の結果を回す arrayではない (エラー時にありがち) 実行時エラー yando @ Shimokita.php
  • 19. 失敗1 配列かチェック 配列の時だけ実行ネストが深くなってしまう yando @ Shimokita.php
  • 20. 失敗1 配列で無ければ、 空の配列にする 配列と決め打ち 手抜きのnull呼び出し側に責務が増えてしまっている yando @ Shimokita.php
  • 21. 教訓• 関数が返すデータの型の一貫性• エラー時の挙動を見落としがち• 検索結果が0件だとエラーで画面がめ ちゃくちゃになってしまったりすると 残念感アップ yando @ Shimokita.php
  • 22. 更新• ループ内から変数を更新• 意図しない処理にならないか• データの大破壊 yando @ Shimokita.php
  • 23. 失敗2 各要素を上書き 全て更新された yando @ Shimokita.php
  • 24. 失敗2 各要素を上書き 更新されていない yando @ Shimokita.php
  • 25. 失敗2 改 参照代入 更新された! yando @ Shimokita.php
  • 26. 失敗2 オブジェクトの配列 各要素を上書き更新された yando @ Shimokita.php
  • 27. 教訓• 配列の値は通常はコピーされる• & を付けた代入参照は黒魔術• オブジェクトはコピーされない• 一時変数への代入は避ける方が無難 yando @ Shimokita.php
  • 28. 明解な方を使う オリジナルを更新 更新しないかも (配列 or 参照代入 or オブジェクト) yando @ Shimokita.php
  • 29. ループの後• foreachで最後に使った変数が残る• ループが実行されない場合は未定義• あてにしてはいけない yando @ Shimokita.php
  • 30. 失敗3 ループ外で使えてしまう yando @ Shimokita.php
  • 31. 失敗3 変数が未定義 yando @ Shimokita.php
  • 32. 多重• foreachは便利• データが複雑だとループ内でループ• 2重が限度• 3重以上は人間には読解が難しい yando @ Shimokita.php
  • 33. 読みづらい yando @ Shimokita.php
  • 34. 応用 yando @ Shimokita.php
  • 35. 応用• 件数判定• 継続・中止• イテレーター• ジェネレーター yando @ Shimokita.php
  • 36. 応用1 自分でカウンタを作る 自分でインクリメント yando @ Shimokita.php
  • 37. 継続・中止• continueで次のループへ• breakでループをストップ• 処理しないでよいデータをスキップ yando @ Shimokita.php
  • 38. 応用2 4バイト以下の時 次のループへ yando @ Shimokita.php
  • 39. 応用2 4バイト以下の時 ループ全体を中止 yando @ Shimokita.php
  • 40. イテレーター• Iteratorインターフェースを実装• rewind current key next valid• 上記のメソッドを実装• オブジェクトのデータや処理を回せる yando @ Shimokita.php
  • 41. 回った yando @ Shimokita.php
  • 42. イテレーター• is_array で判定できない• 複雑な処理ができるが• それってSPLで出来るかも? yando @ Shimokita.php
  • 43. イテレーター 任意の件数を取り出す 正規表現マッチ yando @ Shimokita.php
  • 44. ジェネレーター• PHP5.5からの新機能• イテレーターをもっと簡単に• 「前に進むだけのイテレーター」• returnの替わりにyieldでデータを返す yando @ Shimokita.php
  • 45. 動くぞ 1回分のデータ yieldを含む関数を指定 普通に回せた! yando @ Shimokita.php
  • 46. 活用法• 巨大な配列を作らずに処理• 通常のforeachは事前に配列が必要• 巨大なデータやファイル処理を高速化 yando @ Shimokita.php
  • 47. 配列版 行数分の配列 使用量計測 普通に回せた! yando @ Shimokita.php
  • 48. ジェネレータ版 ファイルポインタ 一行づつyield yando @ Shimokita.php
  • 49. 結果 ジェネレータは大データ でもメモリを節約 yando @ Shimokita.php
  • 50. まとめ yando @ Shimokita.php
  • 51. 基本が大事• 頻繁に使うからこそ綺麗に• 摩訶不思議なループを書かない• 回しにくい関数を作らない yando @ Shimokita.php
  • 52. おまけ• 実はオブジェクトは何でも回せる• PHP5.5なら代入にlistが使える yando @ Shimokita.php