Submit Search
Upload
PHPの教室「foreachを極める」
•
63 likes
•
26,544 views
Yusuke Ando
Follow
録画の動画はこちら http://new.livestream.com/shimokitazawa-osscafe/shimokita-php/videos/9891154
Read less
Read more
Report
Share
Report
Share
1 of 52
Download now
Download to read offline
Recommended
PHPで並列処理する ライブラリを作った
PHPで並列処理する ライブラリを作った
Hironobu Saitoh
PSR-1 と PSR-2 を5分でざっくり理解する
PSR-1 と PSR-2 を5分でざっくり理解する
Wataru Terada
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコード
Shigenori Sagawa
ソーシャルゲームスケールアウトの歴史
ソーシャルゲームスケールアウトの歴史
Drecom Co., Ltd.
PHP実践 ~外部APIを使って情報を取得する~
PHP実践 ~外部APIを使って情報を取得する~
schoowebcampus
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
shinjiigarashi
良くわかるMeta
良くわかるMeta
daichi horio
Androidでvulkan事始め
Androidでvulkan事始め
章暢 藤井
Recommended
PHPで並列処理する ライブラリを作った
PHPで並列処理する ライブラリを作った
Hironobu Saitoh
PSR-1 と PSR-2 を5分でざっくり理解する
PSR-1 と PSR-2 を5分でざっくり理解する
Wataru Terada
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコード
Shigenori Sagawa
ソーシャルゲームスケールアウトの歴史
ソーシャルゲームスケールアウトの歴史
Drecom Co., Ltd.
PHP実践 ~外部APIを使って情報を取得する~
PHP実践 ~外部APIを使って情報を取得する~
schoowebcampus
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
shinjiigarashi
良くわかるMeta
良くわかるMeta
daichi horio
Androidでvulkan事始め
Androidでvulkan事始め
章暢 藤井
CEDEC2015 サブディビジョンサーフェスの すべてがわかる
CEDEC2015 サブディビジョンサーフェスの すべてがわかる
Takahito Tejima
運用設計の必要性と5年後のIT部門の姿について
運用設計の必要性と5年後のIT部門の姿について
UNIRITA Incorporated
継承辺りのもしかしたらマイナーかもしれない C#
継承辺りのもしかしたらマイナーかもしれない C#
m ishizaki
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
Koichiro Matsuoka
.NET Core時代のCI/CD
.NET Core時代のCI/CD
Yuta Matsumura
C++のビルド高速化について
C++のビルド高速化について
AimingStudy
Win32 APIをてなずけよう
Win32 APIをてなずけよう
Kouji Matsui
iOSでライブラリを提供する際に気をつけたいこと
iOSでライブラリを提供する際に気をつけたいこと
asakahara
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
shinjiigarashi
きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回
Tomoya Kawanishi
C++でできる!OS自作入門
C++でできる!OS自作入門
uchan_nos
Jupyter notebook を用いた文芸的インフラ運用のススメ
Jupyter notebook を用いた文芸的インフラ運用のススメ
No Bu
Redmineの開発状況のこれまでと現在
Redmineの開発状況のこれまでと現在
Go Maeda
Ruby での外部コマンドの実行について
Ruby での外部コマンドの実行について
Tomoya Kawanishi
Fluentd, Digdag, Embulkを用いたデータ分析基盤の始め方
Fluentd, Digdag, Embulkを用いたデータ分析基盤の始め方
Kentaro Yoshida
OAuth 2.0 Web Messaging Response Mode - OpenID Summit Tokyo 2015
OAuth 2.0 Web Messaging Response Mode - OpenID Summit Tokyo 2015
Toru Yamaguchi
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
増田 亨
PHPの今とこれから2021
PHPの今とこれから2021
Rui Hirokawa
インメモリーで超高速処理を実現する場合のカギ
インメモリーで超高速処理を実現する場合のカギ
Masaki Yamakawa
JSでファミコンエミュレータを作った時の話
JSでファミコンエミュレータを作った時の話
sairoutine
PHPer女子が語る!こんなコードを書くヒトはモテない~きほん編~@PHPカンファレンス2014
PHPer女子が語る!こんなコードを書くヒトはモテない~きほん編~@PHPカンファレンス2014
Hikari Fukasawa
PHPコアから読み解く定石の嘘ホント #phpcon2013
PHPコアから読み解く定石の嘘ホント #phpcon2013
Yahoo!デベロッパーネットワーク
More Related Content
What's hot
CEDEC2015 サブディビジョンサーフェスの すべてがわかる
CEDEC2015 サブディビジョンサーフェスの すべてがわかる
Takahito Tejima
運用設計の必要性と5年後のIT部門の姿について
運用設計の必要性と5年後のIT部門の姿について
UNIRITA Incorporated
継承辺りのもしかしたらマイナーかもしれない C#
継承辺りのもしかしたらマイナーかもしれない C#
m ishizaki
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
Koichiro Matsuoka
.NET Core時代のCI/CD
.NET Core時代のCI/CD
Yuta Matsumura
C++のビルド高速化について
C++のビルド高速化について
AimingStudy
Win32 APIをてなずけよう
Win32 APIをてなずけよう
Kouji Matsui
iOSでライブラリを提供する際に気をつけたいこと
iOSでライブラリを提供する際に気をつけたいこと
asakahara
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
shinjiigarashi
きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回
Tomoya Kawanishi
C++でできる!OS自作入門
C++でできる!OS自作入門
uchan_nos
Jupyter notebook を用いた文芸的インフラ運用のススメ
Jupyter notebook を用いた文芸的インフラ運用のススメ
No Bu
Redmineの開発状況のこれまでと現在
Redmineの開発状況のこれまでと現在
Go Maeda
Ruby での外部コマンドの実行について
Ruby での外部コマンドの実行について
Tomoya Kawanishi
Fluentd, Digdag, Embulkを用いたデータ分析基盤の始め方
Fluentd, Digdag, Embulkを用いたデータ分析基盤の始め方
Kentaro Yoshida
OAuth 2.0 Web Messaging Response Mode - OpenID Summit Tokyo 2015
OAuth 2.0 Web Messaging Response Mode - OpenID Summit Tokyo 2015
Toru Yamaguchi
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
増田 亨
PHPの今とこれから2021
PHPの今とこれから2021
Rui Hirokawa
インメモリーで超高速処理を実現する場合のカギ
インメモリーで超高速処理を実現する場合のカギ
Masaki Yamakawa
JSでファミコンエミュレータを作った時の話
JSでファミコンエミュレータを作った時の話
sairoutine
What's hot
(20)
CEDEC2015 サブディビジョンサーフェスの すべてがわかる
CEDEC2015 サブディビジョンサーフェスの すべてがわかる
運用設計の必要性と5年後のIT部門の姿について
運用設計の必要性と5年後のIT部門の姿について
継承辺りのもしかしたらマイナーかもしれない C#
継承辺りのもしかしたらマイナーかもしれない C#
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
.NET Core時代のCI/CD
.NET Core時代のCI/CD
C++のビルド高速化について
C++のビルド高速化について
Win32 APIをてなずけよう
Win32 APIをてなずけよう
iOSでライブラリを提供する際に気をつけたいこと
iOSでライブラリを提供する際に気をつけたいこと
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回
C++でできる!OS自作入門
C++でできる!OS自作入門
Jupyter notebook を用いた文芸的インフラ運用のススメ
Jupyter notebook を用いた文芸的インフラ運用のススメ
Redmineの開発状況のこれまでと現在
Redmineの開発状況のこれまでと現在
Ruby での外部コマンドの実行について
Ruby での外部コマンドの実行について
Fluentd, Digdag, Embulkを用いたデータ分析基盤の始め方
Fluentd, Digdag, Embulkを用いたデータ分析基盤の始め方
OAuth 2.0 Web Messaging Response Mode - OpenID Summit Tokyo 2015
OAuth 2.0 Web Messaging Response Mode - OpenID Summit Tokyo 2015
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
PHPの今とこれから2021
PHPの今とこれから2021
インメモリーで超高速処理を実現する場合のカギ
インメモリーで超高速処理を実現する場合のカギ
JSでファミコンエミュレータを作った時の話
JSでファミコンエミュレータを作った時の話
Viewers also liked
PHPer女子が語る!こんなコードを書くヒトはモテない~きほん編~@PHPカンファレンス2014
PHPer女子が語る!こんなコードを書くヒトはモテない~きほん編~@PHPカンファレンス2014
Hikari Fukasawa
PHPコアから読み解く定石の嘘ホント #phpcon2013
PHPコアから読み解く定石の嘘ホント #phpcon2013
Yahoo!デベロッパーネットワーク
本当に怖いパフォーマンスが悪い実装 #phpcon2013
本当に怖いパフォーマンスが悪い実装 #phpcon2013
Yahoo!デベロッパーネットワーク
PHPer女子が語る2015!こんなコードを書くヒトはモテない〜コラボ編〜@PHPカンファレンス2015 #phpcon2015
PHPer女子が語る2015!こんなコードを書くヒトはモテない〜コラボ編〜@PHPカンファレンス2015 #phpcon2015
Hikari Fukasawa
PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門
kwatch
40分濃縮 PHP classの教室
40分濃縮 PHP classの教室
Yusuke Ando
ドメイン駆動設計を実践するプログラマーの悩み
ドメイン駆動設計を実践するプログラマーの悩み
haljik Seiji
90分間濃縮 PHPエラーの教室
90分間濃縮 PHPエラーの教室
Yusuke Ando
Tips and tricks to win kaggle data science competitions
Tips and tricks to win kaggle data science competitions
Darius Barušauskas
Facebookページでユーザーからの最近の投稿を表示しよう
Facebookページでユーザーからの最近の投稿を表示しよう
新潟コンサルタント横田秀珠
ネットビジネスで把握すべき予測・訪問・成約の3キーワード
ネットビジネスで把握すべき予測・訪問・成約の3キーワード
新潟コンサルタント横田秀珠
SEOとSNS、友達と他人、個人と会社、誰から何を買うのか?セミナー
SEOとSNS、友達と他人、個人と会社、誰から何を買うのか?セミナー
新潟コンサルタント横田秀珠
山口県山陽小野田市Facebookセミナーin小野田商工会議所
山口県山陽小野田市Facebookセミナーin小野田商工会議所
新潟コンサルタント横田秀珠
Ejemplo Linq To SQL
Ejemplo Linq To SQL
jcfarit
栃木Twitterセミナーin大田原法人会
栃木Twitterセミナーin大田原法人会
新潟コンサルタント横田秀珠
Introduccion A Linq 1205779028184546 5
Introduccion A Linq 1205779028184546 5
google
Programación con linq
Programación con linq
Gabriel Espinoza Erices
Phpstormちょっといい話
Phpstormちょっといい話
Hisateru Tanaka
只見線の復旧状況を小出駅ー大白川駅の車窓から往復で撮影
只見線の復旧状況を小出駅ー大白川駅の車窓から往復で撮影
新潟コンサルタント横田秀珠
Viewers also liked
(19)
PHPer女子が語る!こんなコードを書くヒトはモテない~きほん編~@PHPカンファレンス2014
PHPer女子が語る!こんなコードを書くヒトはモテない~きほん編~@PHPカンファレンス2014
PHPコアから読み解く定石の嘘ホント #phpcon2013
PHPコアから読み解く定石の嘘ホント #phpcon2013
本当に怖いパフォーマンスが悪い実装 #phpcon2013
本当に怖いパフォーマンスが悪い実装 #phpcon2013
PHPer女子が語る2015!こんなコードを書くヒトはモテない〜コラボ編〜@PHPカンファレンス2015 #phpcon2015
PHPer女子が語る2015!こんなコードを書くヒトはモテない〜コラボ編〜@PHPカンファレンス2015 #phpcon2015
PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門
40分濃縮 PHP classの教室
40分濃縮 PHP classの教室
ドメイン駆動設計を実践するプログラマーの悩み
ドメイン駆動設計を実践するプログラマーの悩み
90分間濃縮 PHPエラーの教室
90分間濃縮 PHPエラーの教室
Tips and tricks to win kaggle data science competitions
Tips and tricks to win kaggle data science competitions
Facebookページでユーザーからの最近の投稿を表示しよう
Facebookページでユーザーからの最近の投稿を表示しよう
ネットビジネスで把握すべき予測・訪問・成約の3キーワード
ネットビジネスで把握すべき予測・訪問・成約の3キーワード
SEOとSNS、友達と他人、個人と会社、誰から何を買うのか?セミナー
SEOとSNS、友達と他人、個人と会社、誰から何を買うのか?セミナー
山口県山陽小野田市Facebookセミナーin小野田商工会議所
山口県山陽小野田市Facebookセミナーin小野田商工会議所
Ejemplo Linq To SQL
Ejemplo Linq To SQL
栃木Twitterセミナーin大田原法人会
栃木Twitterセミナーin大田原法人会
Introduccion A Linq 1205779028184546 5
Introduccion A Linq 1205779028184546 5
Programación con linq
Programación con linq
Phpstormちょっといい話
Phpstormちょっといい話
只見線の復旧状況を小出駅ー大白川駅の車窓から往復で撮影
只見線の復旧状況を小出駅ー大白川駅の車窓から往復で撮影
Similar to PHPの教室「foreachを極める」
Good Parts of PHP and the UNIX Philosophy
Good Parts of PHP and the UNIX Philosophy
Yuya Takeyama
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
Junichi Ishida
PHPカンファレンス2014の懇親会飛び込みLT資料
PHPカンファレンス2014の懇親会飛び込みLT資料
Junichi Ishida
WordPress中級者への道!テンプレートタグはどう動くのか!?
WordPress中級者への道!テンプレートタグはどう動くのか!?
Shinichi Nishikawa
Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~
CHY72
FP習熟度レベルとFSharpxのIteratee
FP習熟度レベルとFSharpxのIteratee
pocketberserker
Hello world make
Hello world make
mitsu1119
【デブサミ福岡B5】コードレビューの進め方~全員で行う品質の維持~
【デブサミ福岡B5】コードレビューの進め方~全員で行う品質の維持~
Developers Summit
Similar to PHPの教室「foreachを極める」
(8)
Good Parts of PHP and the UNIX Philosophy
Good Parts of PHP and the UNIX Philosophy
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
PHPカンファレンス2014の懇親会飛び込みLT資料
PHPカンファレンス2014の懇親会飛び込みLT資料
WordPress中級者への道!テンプレートタグはどう動くのか!?
WordPress中級者への道!テンプレートタグはどう動くのか!?
Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~
FP習熟度レベルとFSharpxのIteratee
FP習熟度レベルとFSharpxのIteratee
Hello world make
Hello world make
【デブサミ福岡B5】コードレビューの進め方~全員で行う品質の維持~
【デブサミ福岡B5】コードレビューの進め方~全員で行う品質の維持~
More from Yusuke Ando
ダイナミック広告の改善と拡大
ダイナミック広告の改善と拡大
Yusuke Ando
DevOpsを実現するChef活用テクニック
DevOpsを実現するChef活用テクニック
Yusuke Ando
DevOpsを実現する為のChef実践テクニック Chef12対応版
DevOpsを実現する為のChef実践テクニック Chef12対応版
Yusuke Ando
Testing your app with Selenium on Travis CI
Testing your app with Selenium on Travis CI
Yusuke Ando
Travis CIで実現するPHPアプリの自動テスト
Travis CIで実現するPHPアプリの自動テスト
Yusuke Ando
Shimokita.Unity Detonatorで爆発
Shimokita.Unity Detonatorで爆発
Yusuke Ando
Shimokita.Unity RigidbodyとColliderで衝突
Shimokita.Unity RigidbodyとColliderで衝突
Yusuke Ando
Webプログラマの為のUnity入門
Webプログラマの為のUnity入門
Yusuke Ando
ゴールデンウィークに最適な学習コンテンツ
ゴールデンウィークに最適な学習コンテンツ
Yusuke Ando
Travis CIですぐに始める継続的インテグレーション
Travis CIですぐに始める継続的インテグレーション
Yusuke Ando
ブログやサイトのJekyllへの移行
ブログやサイトのJekyllへの移行
Yusuke Ando
PHPとTravis CIでブラウザテスト
PHPとTravis CIでブラウザテスト
Yusuke Ando
Shimokita.Unity パリの街をユニティちゃんが駆ける
Shimokita.Unity パリの街をユニティちゃんが駆ける
Yusuke Ando
Dev opschef
Dev opschef
Yusuke Ando
Paa s and oss
Paa s and oss
Yusuke Ando
New relic
New relic
Yusuke Ando
Engine Yardで作る NetCommons3のクラウド環境
Engine Yardで作る NetCommons3のクラウド環境
Yusuke Ando
Engine Yard Cloud
Engine Yard Cloud
Yusuke Ando
最近のCandyCane - PHP版Redmineでタスク管理を始めよう
最近のCandyCane - PHP版Redmineでタスク管理を始めよう
Yusuke Ando
20121225 php
20121225 php
Yusuke Ando
More from Yusuke Ando
(20)
ダイナミック広告の改善と拡大
ダイナミック広告の改善と拡大
DevOpsを実現するChef活用テクニック
DevOpsを実現するChef活用テクニック
DevOpsを実現する為のChef実践テクニック Chef12対応版
DevOpsを実現する為のChef実践テクニック Chef12対応版
Testing your app with Selenium on Travis CI
Testing your app with Selenium on Travis CI
Travis CIで実現するPHPアプリの自動テスト
Travis CIで実現するPHPアプリの自動テスト
Shimokita.Unity Detonatorで爆発
Shimokita.Unity Detonatorで爆発
Shimokita.Unity RigidbodyとColliderで衝突
Shimokita.Unity RigidbodyとColliderで衝突
Webプログラマの為のUnity入門
Webプログラマの為のUnity入門
ゴールデンウィークに最適な学習コンテンツ
ゴールデンウィークに最適な学習コンテンツ
Travis CIですぐに始める継続的インテグレーション
Travis CIですぐに始める継続的インテグレーション
ブログやサイトのJekyllへの移行
ブログやサイトのJekyllへの移行
PHPとTravis CIでブラウザテスト
PHPとTravis CIでブラウザテスト
Shimokita.Unity パリの街をユニティちゃんが駆ける
Shimokita.Unity パリの街をユニティちゃんが駆ける
Dev opschef
Dev opschef
Paa s and oss
Paa s and oss
New relic
New relic
Engine Yardで作る NetCommons3のクラウド環境
Engine Yardで作る NetCommons3のクラウド環境
Engine Yard Cloud
Engine Yard Cloud
最近のCandyCane - PHP版Redmineでタスク管理を始めよう
最近のCandyCane - PHP版Redmineでタスク管理を始めよう
20121225 php
20121225 php
PHPの教室「foreachを極める」
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
Download now