SlideShare a Scribd company logo
1 of 40
PHP
foreachでの参照渡しに潜む罠
foreachでループ中に配列の値を変更したいとき
参照渡しにしたりしますよね
$array = [‘foo’, ‘bar’, ‘baz’]
foreach ($array as &$value) {
$value = strtoupper($value);
}
var_dump($array);
$array = [‘foo’, ‘bar’, ‘baz’]
foreach ($array as &$value) {
$value = strtoupper($value);
}
var_dump($array);
array(3) {
[0]=> string(3) "FOO"
[1]=> string(3) "BAR"
[2]=> &string(3) "BAZ"
}
ここまで想定通り
ではこの配列にもう一度foreachを、
今度は非参照渡しで使うと?
$array = [‘foo’, ‘bar’, ‘baz’]
foreach ($array as &$value) {
$value = strtoupper($value);
}
foreach ($array as $key => $value) {
$array[$key] = strtolower($value);
}
var_dump($array);
$array = [‘foo’, ‘bar’, ‘baz’]
foreach ($array as &$value) {
$value = strtoupper($value);
}
foreach ($array as $key => $value) {
$array[$key] = strtolower($value);
}
var_dump($array);
array(3) {
[0]=> string(3) "foo"
[1]=> string(3) "bar"
[2]=> &string(3) "bar"
}
$array = [‘foo’, ‘bar’, ‘baz’]
foreach ($array as &$value) {
$value = strtoupper($value);
}
foreach ($array as $key => $value) {
$array[$key] = strtolower($value);
}
var_dump($array);
array(3) {
[0]=> string(3) "foo"
[1]=> string(3) "bar"
[2]=> &string(3) "bar"
}
!?
配列が破壊されてしまう
どうしてこうなった
$valueがforeachを抜けた後も参照を保持していることが原因
どうしてこうなった
$valueがforeachを抜けた後も参照を保持していることが原因
どうしてこうなった
「いまいちよくわからない」 (東京都 会社員 T・H)
$valueがforeachを抜けた後も参照を保持していることが原因
どうしてこうなった
「いまいちよくわからない」 (東京都 会社員 T・H)
「こころにひびかない」 (東京都 会社員 T・H)
$valueがforeachを抜けた後も参照を保持していることが原因
どうしてこうなった
「いまいちよくわからない」 (東京都 会社員 T・H)
「こころにひびかない」 (東京都 会社員 T・H)
「おすしがたべたい」 (東京都 会社員 T・H)
実際何が起こっているのか
$array = [‘foo’, ‘bar’, ‘baz’]
foreach ($array as &$value) {
$value = strtoupper($value);
}
// 各ループの処理開始前に何が代入されているのか?
$array = [‘foo’, ‘bar’, ‘baz’]
foreach ($array as &$value) {
$value = strtoupper($value);
}
// 各ループの処理開始前に何が代入されているのか?
// $value = &$array[0] = ‘foo’
// $value = &$array[1] = ‘bar’
// $value = &$array[2] = ‘baz’
$array = [‘foo’, ‘bar’, ‘baz’]
foreach ($array as &$value) {
$value = strtoupper($value);
}
// 各ループの処理開始前に何が代入されているのか?
// $value = &$array[0] = ‘foo’
// $value = &$array[1] = ‘bar’
// $value = &$array[2] = ‘baz’
// $valueを変更して参照先の$array[n]を変更している
$array = [‘foo’, ‘bar’, ‘baz’]
foreach ($array as &$value) {
$value = strtoupper($value);
}
// ループ終了後に$valueはどうなっているのか?
$array = [‘foo’, ‘bar’, ‘baz’]
foreach ($array as &$value) {
$value = strtoupper($value);
}
// ループ終了後に$valueはどうなっているのか?
// $value = &$array[2] = ‘BAZ’
$array = [‘foo’, ‘bar’, ‘baz’]
foreach ($array as &$value) {
$value = strtoupper($value);
}
// ループ終了後に$valueはどうなっているのか?
// $value = &$array[2] = ‘BAZ’
// これは$array[2]への参照なので、
// $valueを変更すると$array[2]が変更される
$array = [‘foo’, ‘bar’, ‘baz’]
foreach ($array as &$value) {
$value = strtoupper($value);
}
// $value = &$array[2] = ‘BAZ’
foreach ($array as $key => $value) {
$array[$key] = strtolower($value);
}
$array = [‘foo’, ‘bar’, ‘baz’]
foreach ($array as &$value) {
$value = strtoupper($value);
}
// $value = &$array[2] = ‘BAZ’
foreach ($array as $key => $value) {
$array[$key] = strtolower($value);
}
// 各ループの処理開始前に何が代入されているのか?
$array = [‘foo’, ‘bar’, ‘baz’]
foreach ($array as &$value) {
$value = strtoupper($value);
}
// $value = &$array[2] = ‘BAZ’
foreach ($array as $key => $value) {
$array[$key] = strtolower($value);
}
// 各ループの処理開始前に何が代入されているのか?
// ($value = &$array[2]) = ($array[0] = ‘FOO’)
$array = [‘foo’, ‘bar’, ‘baz’]
foreach ($array as &$value) {
$value = strtoupper($value);
}
// $value = &$array[2] = ‘BAZ’
foreach ($array as $key => $value) {
$array[$key] = strtolower($value);
}
// 各ループの処理開始前に何が代入されているのか?
// ($value = &$array[2]) = ($array[0] = ‘FOO’)
// ($value = &$array[2]) = ($array[1] = ‘BAR’)
$array = [‘foo’, ‘bar’, ‘baz’]
foreach ($array as &$value) {
$value = strtoupper($value);
}
// $value = &$array[2] = ‘BAZ’
foreach ($array as $key => $value) {
$array[$key] = strtolower($value);
}
// 各ループの処理開始前に何が代入されているのか?
// ($value = &$array[2]) = ($array[0] = ‘FOO’)
// ($value = &$array[2]) = ($array[1] = ‘BAR’)
// ($value = &$array[2]) = ($array[2] = ‘BAR’)
$array = [‘foo’, ‘bar’, ‘baz’]
foreach ($array as &$value) {
$value = strtoupper($value);
}
// $value = &$array[2] = ‘BAZ’
foreach ($array as $key => $value) {
$array[$key] = strtolower($value);
}
var_dump($array);
array(3) {
[0]=> string(3) "foo"
[1]=> string(3) "bar"
[2]=> &string(3) "bar"
}
回避するために
二回目も参照渡しにする
書くタイミングがずれていると忘れる危険性が高い
間に大量のコードがあると忘れる危険性が高い
別の人間が書くならば尚更
二回目も参照渡しにする
書くタイミングがずれていると忘れる危険性が高い
間に大量のコードがあると忘れる危険性が高い
別の人間が書くならば尚更
そもそも、「この後はこういうふうに書かないと壊れます」
などという書き方自体すべきではない
二回目も参照渡しにする
ループを抜けたらunset($value)する
実はマニュアルでも推奨されている
http://php.net/manual/ja/control-structures.foreach.php
ループを抜けたらunset($value)する
実はマニュアルでも推奨されている
http://php.net/manual/ja/control-structures.foreach.php
書き忘れる危険性はある
ループを抜けたらunset($value)する
参照渡ししない
そもそも参照渡ししなければ当然起こらない
参照渡ししない
そもそも参照渡ししなければ当然起こらない
参照渡ししない
foreach ($array as $key => $value) {
$array[$key] = strtolower($value);
}
$array_lower = [];
foreach ($array as $value) {
$array_lower[] = strtolower($value);
}
そもそも参照渡ししなければ当然起こらない
参照渡ししない
foreach ($array as $key => $value) {
$array[$key] = strtolower($value);
}
$array_lower = [];
foreach ($array as $value) {
$array_lower[] = strtolower($value);
}
確実だがちょっと書くのが面倒な場合もある
わかりにくいバグの温床になるので
気をつけましょう

More Related Content

What's hot

object detection with lidar-camera fusion: survey
object detection with lidar-camera fusion: surveyobject detection with lidar-camera fusion: survey
object detection with lidar-camera fusion: surveyTakuya Minagawa
 
失敗事例で学ぶ負荷試験
失敗事例で学ぶ負荷試験失敗事例で学ぶ負荷試験
失敗事例で学ぶ負荷試験樽八 仲川
 
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる
DSIRNLP #3 LZ4 の速さの秘密に迫ってみるDSIRNLP #3 LZ4 の速さの秘密に迫ってみる
DSIRNLP #3 LZ4 の速さの秘密に迫ってみるAtsushi KOMIYA
 
「トピックモデル」を使った「バグチケットの自動タグ付け」
「トピックモデル」を使った「バグチケットの自動タグ付け」「トピックモデル」を使った「バグチケットの自動タグ付け」
「トピックモデル」を使った「バグチケットの自動タグ付け」Koichi Tanizaki
 
自然言語処理における深層学習を用いた予測の不確実性 - Predictive Uncertainty in NLP -
自然言語処理における深層学習を用いた予測の不確実性  - Predictive Uncertainty in NLP -自然言語処理における深層学習を用いた予測の不確実性  - Predictive Uncertainty in NLP -
自然言語処理における深層学習を用いた予測の不確実性 - Predictive Uncertainty in NLP -tmtm otm
 
C# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しよう
C# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しようC# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しよう
C# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しようFujio Kojima
 
3DESの件 〜俺、112bitになります〜
3DESの件 〜俺、112bitになります〜3DESの件 〜俺、112bitになります〜
3DESの件 〜俺、112bitになります〜enigma63
 
New Relicで始める、.NET Applications on AWSのObservability
New Relicで始める、.NET Applications on AWSのObservabilityNew Relicで始める、.NET Applications on AWSのObservability
New Relicで始める、.NET Applications on AWSのObservabilityTakayoshi Tanaka
 
デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)
デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)
デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)Masahiro Nishimi
 
Transforming Accessibility one lunch at a tiime - CSUN 2023
Transforming Accessibility one lunch at a tiime - CSUN 2023Transforming Accessibility one lunch at a tiime - CSUN 2023
Transforming Accessibility one lunch at a tiime - CSUN 2023Ted Drake
 
【CVPR 2020 メタサーベイ】Image Retrieval
【CVPR 2020 メタサーベイ】Image Retrieval【CVPR 2020 メタサーベイ】Image Retrieval
【CVPR 2020 メタサーベイ】Image Retrievalcvpaper. challenge
 
効率的学習 / Efficient Training(メタサーベイ)
効率的学習 / Efficient Training(メタサーベイ)効率的学習 / Efficient Training(メタサーベイ)
効率的学習 / Efficient Training(メタサーベイ)cvpaper. challenge
 
深層学習の非常に簡単な説明
深層学習の非常に簡単な説明深層学習の非常に簡単な説明
深層学習の非常に簡単な説明Seiichi Uchida
 
Grad-CAMの始まりのお話
Grad-CAMの始まりのお話Grad-CAMの始まりのお話
Grad-CAMの始まりのお話Shintaro Yoshida
 
SSII2020TS: Event-Based Camera の基礎と ニューラルネットワークによる信号処理 〜 生き物のように「変化」を捉えるビジョンセ...
SSII2020TS: Event-Based Camera の基礎と ニューラルネットワークによる信号処理 〜 生き物のように「変化」を捉えるビジョンセ...SSII2020TS: Event-Based Camera の基礎と ニューラルネットワークによる信号処理 〜 生き物のように「変化」を捉えるビジョンセ...
SSII2020TS: Event-Based Camera の基礎と ニューラルネットワークによる信号処理 〜 生き物のように「変化」を捉えるビジョンセ...SSII
 
GCP・GKEで作るスケーラブルなゲーム開発環境
GCP・GKEで作るスケーラブルなゲーム開発環境GCP・GKEで作るスケーラブルなゲーム開発環境
GCP・GKEで作るスケーラブルなゲーム開発環境Yasutomo Uemori
 
Lightningアプリケーションビルダー(基本操作と標準コンポーネント)
Lightningアプリケーションビルダー(基本操作と標準コンポーネント)Lightningアプリケーションビルダー(基本操作と標準コンポーネント)
Lightningアプリケーションビルダー(基本操作と標準コンポーネント)Junko Nakayama
 
GitHub入門 手順編
GitHub入門 手順編GitHub入門 手順編
GitHub入門 手順編hideaki honda
 
180215 Ponanzaにおける強化学習、ディープラーニングとその先
180215 Ponanzaにおける強化学習、ディープラーニングとその先180215 Ponanzaにおける強化学習、ディープラーニングとその先
180215 Ponanzaにおける強化学習、ディープラーニングとその先HEROZ-JAPAN
 

What's hot (20)

object detection with lidar-camera fusion: survey
object detection with lidar-camera fusion: surveyobject detection with lidar-camera fusion: survey
object detection with lidar-camera fusion: survey
 
失敗事例で学ぶ負荷試験
失敗事例で学ぶ負荷試験失敗事例で学ぶ負荷試験
失敗事例で学ぶ負荷試験
 
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる
DSIRNLP #3 LZ4 の速さの秘密に迫ってみるDSIRNLP #3 LZ4 の速さの秘密に迫ってみる
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる
 
Nmapの真実(続)
Nmapの真実(続)Nmapの真実(続)
Nmapの真実(続)
 
「トピックモデル」を使った「バグチケットの自動タグ付け」
「トピックモデル」を使った「バグチケットの自動タグ付け」「トピックモデル」を使った「バグチケットの自動タグ付け」
「トピックモデル」を使った「バグチケットの自動タグ付け」
 
自然言語処理における深層学習を用いた予測の不確実性 - Predictive Uncertainty in NLP -
自然言語処理における深層学習を用いた予測の不確実性  - Predictive Uncertainty in NLP -自然言語処理における深層学習を用いた予測の不確実性  - Predictive Uncertainty in NLP -
自然言語処理における深層学習を用いた予測の不確実性 - Predictive Uncertainty in NLP -
 
C# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しよう
C# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しようC# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しよう
C# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しよう
 
3DESの件 〜俺、112bitになります〜
3DESの件 〜俺、112bitになります〜3DESの件 〜俺、112bitになります〜
3DESの件 〜俺、112bitになります〜
 
New Relicで始める、.NET Applications on AWSのObservability
New Relicで始める、.NET Applications on AWSのObservabilityNew Relicで始める、.NET Applications on AWSのObservability
New Relicで始める、.NET Applications on AWSのObservability
 
デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)
デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)
デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)
 
Transforming Accessibility one lunch at a tiime - CSUN 2023
Transforming Accessibility one lunch at a tiime - CSUN 2023Transforming Accessibility one lunch at a tiime - CSUN 2023
Transforming Accessibility one lunch at a tiime - CSUN 2023
 
【CVPR 2020 メタサーベイ】Image Retrieval
【CVPR 2020 メタサーベイ】Image Retrieval【CVPR 2020 メタサーベイ】Image Retrieval
【CVPR 2020 メタサーベイ】Image Retrieval
 
効率的学習 / Efficient Training(メタサーベイ)
効率的学習 / Efficient Training(メタサーベイ)効率的学習 / Efficient Training(メタサーベイ)
効率的学習 / Efficient Training(メタサーベイ)
 
深層学習の非常に簡単な説明
深層学習の非常に簡単な説明深層学習の非常に簡単な説明
深層学習の非常に簡単な説明
 
Grad-CAMの始まりのお話
Grad-CAMの始まりのお話Grad-CAMの始まりのお話
Grad-CAMの始まりのお話
 
SSII2020TS: Event-Based Camera の基礎と ニューラルネットワークによる信号処理 〜 生き物のように「変化」を捉えるビジョンセ...
SSII2020TS: Event-Based Camera の基礎と ニューラルネットワークによる信号処理 〜 生き物のように「変化」を捉えるビジョンセ...SSII2020TS: Event-Based Camera の基礎と ニューラルネットワークによる信号処理 〜 生き物のように「変化」を捉えるビジョンセ...
SSII2020TS: Event-Based Camera の基礎と ニューラルネットワークによる信号処理 〜 生き物のように「変化」を捉えるビジョンセ...
 
GCP・GKEで作るスケーラブルなゲーム開発環境
GCP・GKEで作るスケーラブルなゲーム開発環境GCP・GKEで作るスケーラブルなゲーム開発環境
GCP・GKEで作るスケーラブルなゲーム開発環境
 
Lightningアプリケーションビルダー(基本操作と標準コンポーネント)
Lightningアプリケーションビルダー(基本操作と標準コンポーネント)Lightningアプリケーションビルダー(基本操作と標準コンポーネント)
Lightningアプリケーションビルダー(基本操作と標準コンポーネント)
 
GitHub入門 手順編
GitHub入門 手順編GitHub入門 手順編
GitHub入門 手順編
 
180215 Ponanzaにおける強化学習、ディープラーニングとその先
180215 Ponanzaにおける強化学習、ディープラーニングとその先180215 Ponanzaにおける強化学習、ディープラーニングとその先
180215 Ponanzaにおける強化学習、ディープラーニングとその先
 

Similar to PHP foreachでの参照渡しに潜む罠

PHP array_uintersectに潜む罠
PHP array_uintersectに潜む罠PHP array_uintersectに潜む罠
PHP array_uintersectに潜む罠Takaaki Hirano
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーyoku0825
 
知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数Wataru Terada
 
Ruby 同好会宣言
Ruby 同好会宣言Ruby 同好会宣言
Ruby 同好会宣言Yuya Takeyama
 
Livesense tech night immutable-js at a glance
Livesense tech night   immutable-js at a glanceLivesense tech night   immutable-js at a glance
Livesense tech night immutable-js at a glanceYuta Shimakawa
 

Similar to PHP foreachでの参照渡しに潜む罠 (6)

PHP array_uintersectに潜む罠
PHP array_uintersectに潜む罠PHP array_uintersectに潜む罠
PHP array_uintersectに潜む罠
 
20170401 alias
20170401 alias20170401 alias
20170401 alias
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
 
知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数
 
Ruby 同好会宣言
Ruby 同好会宣言Ruby 同好会宣言
Ruby 同好会宣言
 
Livesense tech night immutable-js at a glance
Livesense tech night   immutable-js at a glanceLivesense tech night   immutable-js at a glance
Livesense tech night immutable-js at a glance
 

More from Takaaki Hirano

プログラミング言語のマスコットとか紹介
プログラミング言語のマスコットとか紹介プログラミング言語のマスコットとか紹介
プログラミング言語のマスコットとか紹介Takaaki Hirano
 
金曜だけどデザインパターンでも勉強しよう
金曜だけどデザインパターンでも勉強しよう金曜だけどデザインパターンでも勉強しよう
金曜だけどデザインパターンでも勉強しようTakaaki Hirano
 
非同期データ更新のためにメッセージキューを導入した(い)話
非同期データ更新のためにメッセージキューを導入した(い)話非同期データ更新のためにメッセージキューを導入した(い)話
非同期データ更新のためにメッセージキューを導入した(い)話Takaaki Hirano
 
月曜だからデザインパターンでも勉強しよう vol.4 Builder
月曜だからデザインパターンでも勉強しよう vol.4 Builder月曜だからデザインパターンでも勉強しよう vol.4 Builder
月曜だからデザインパターンでも勉強しよう vol.4 BuilderTakaaki Hirano
 
月曜だからデザインパターンでも勉強しよう vol.3 Factory Method & Abstract Factory
月曜だからデザインパターンでも勉強しよう vol.3 Factory Method & Abstract Factory月曜だからデザインパターンでも勉強しよう vol.3 Factory Method & Abstract Factory
月曜だからデザインパターンでも勉強しよう vol.3 Factory Method & Abstract FactoryTakaaki Hirano
 
月曜だからデザインパターンでも勉強しよう vol.2 Flyweight
月曜だからデザインパターンでも勉強しよう vol.2 Flyweight月曜だからデザインパターンでも勉強しよう vol.2 Flyweight
月曜だからデザインパターンでも勉強しよう vol.2 FlyweightTakaaki Hirano
 
月曜だからデザインパターンでも勉強しよう vol.1 それは何 & Singleton
月曜だからデザインパターンでも勉強しよう vol.1 それは何 & Singleton月曜だからデザインパターンでも勉強しよう vol.1 それは何 & Singleton
月曜だからデザインパターンでも勉強しよう vol.1 それは何 & SingletonTakaaki Hirano
 
Mysql(クライアント)の出力が変わるオプション達
Mysql(クライアント)の出力が変わるオプション達Mysql(クライアント)の出力が変わるオプション達
Mysql(クライアント)の出力が変わるオプション達Takaaki Hirano
 
curl_multi_exec()でFire-and-forgetに失敗した話
curl_multi_exec()でFire-and-forgetに失敗した話curl_multi_exec()でFire-and-forgetに失敗した話
curl_multi_exec()でFire-and-forgetに失敗した話Takaaki Hirano
 
書こう!正規表現 vol.4 肯定/否定 先読み/戻り読み
書こう!正規表現 vol.4 肯定/否定 先読み/戻り読み書こう!正規表現 vol.4 肯定/否定 先読み/戻り読み
書こう!正規表現 vol.4 肯定/否定 先読み/戻り読みTakaaki Hirano
 
PHPUnit 4.0で追加されたwillReturn*()の紹介
PHPUnit 4.0で追加されたwillReturn*()の紹介PHPUnit 4.0で追加されたwillReturn*()の紹介
PHPUnit 4.0で追加されたwillReturn*()の紹介Takaaki Hirano
 
書こう!正規表現 vol.3 ()
書こう!正規表現 vol.3 ()書こう!正規表現 vol.3 ()
書こう!正規表現 vol.3 ()Takaaki Hirano
 
sedで複数行処理 使ってみようNを
sedで複数行処理 使ってみようNをsedで複数行処理 使ってみようNを
sedで複数行処理 使ってみようNをTakaaki Hirano
 
ctagsでvimにひきこもる
ctagsでvimにひきこもるctagsでvimにひきこもる
ctagsでvimにひきこもるTakaaki Hirano
 
書こう!正規表現 vol.2 文字クラス(例外)
書こう!正規表現 vol.2 文字クラス(例外)書こう!正規表現 vol.2 文字クラス(例外)
書こう!正規表現 vol.2 文字クラス(例外)Takaaki Hirano
 
書こう!正規表現 vol.2 文字クラス(基本)
書こう!正規表現 vol.2 文字クラス(基本)書こう!正規表現 vol.2 文字クラス(基本)
書こう!正規表現 vol.2 文字クラス(基本)Takaaki Hirano
 
書こう!ユニットテスト vol.2 どうやって?
書こう!ユニットテスト vol.2 どうやって?書こう!ユニットテスト vol.2 どうやって?
書こう!ユニットテスト vol.2 どうやって?Takaaki Hirano
 
書こう!正規表現 vol.1 正規表現 is 何
書こう!正規表現 vol.1 正規表現 is 何書こう!正規表現 vol.1 正規表現 is 何
書こう!正規表現 vol.1 正規表現 is 何Takaaki Hirano
 
書こう!ユニットテスト vol.1 ナンデ?
書こう!ユニットテスト vol.1 ナンデ?書こう!ユニットテスト vol.1 ナンデ?
書こう!ユニットテスト vol.1 ナンデ?Takaaki Hirano
 

More from Takaaki Hirano (20)

プログラミング言語のマスコットとか紹介
プログラミング言語のマスコットとか紹介プログラミング言語のマスコットとか紹介
プログラミング言語のマスコットとか紹介
 
金曜だけどデザインパターンでも勉強しよう
金曜だけどデザインパターンでも勉強しよう金曜だけどデザインパターンでも勉強しよう
金曜だけどデザインパターンでも勉強しよう
 
非同期データ更新のためにメッセージキューを導入した(い)話
非同期データ更新のためにメッセージキューを導入した(い)話非同期データ更新のためにメッセージキューを導入した(い)話
非同期データ更新のためにメッセージキューを導入した(い)話
 
月曜だからデザインパターンでも勉強しよう vol.4 Builder
月曜だからデザインパターンでも勉強しよう vol.4 Builder月曜だからデザインパターンでも勉強しよう vol.4 Builder
月曜だからデザインパターンでも勉強しよう vol.4 Builder
 
月曜だからデザインパターンでも勉強しよう vol.3 Factory Method & Abstract Factory
月曜だからデザインパターンでも勉強しよう vol.3 Factory Method & Abstract Factory月曜だからデザインパターンでも勉強しよう vol.3 Factory Method & Abstract Factory
月曜だからデザインパターンでも勉強しよう vol.3 Factory Method & Abstract Factory
 
月曜だからデザインパターンでも勉強しよう vol.2 Flyweight
月曜だからデザインパターンでも勉強しよう vol.2 Flyweight月曜だからデザインパターンでも勉強しよう vol.2 Flyweight
月曜だからデザインパターンでも勉強しよう vol.2 Flyweight
 
月曜だからデザインパターンでも勉強しよう vol.1 それは何 & Singleton
月曜だからデザインパターンでも勉強しよう vol.1 それは何 & Singleton月曜だからデザインパターンでも勉強しよう vol.1 それは何 & Singleton
月曜だからデザインパターンでも勉強しよう vol.1 それは何 & Singleton
 
Mysql(クライアント)の出力が変わるオプション達
Mysql(クライアント)の出力が変わるオプション達Mysql(クライアント)の出力が変わるオプション達
Mysql(クライアント)の出力が変わるオプション達
 
curl_multi_exec()でFire-and-forgetに失敗した話
curl_multi_exec()でFire-and-forgetに失敗した話curl_multi_exec()でFire-and-forgetに失敗した話
curl_multi_exec()でFire-and-forgetに失敗した話
 
書こう!正規表現 vol.4 肯定/否定 先読み/戻り読み
書こう!正規表現 vol.4 肯定/否定 先読み/戻り読み書こう!正規表現 vol.4 肯定/否定 先読み/戻り読み
書こう!正規表現 vol.4 肯定/否定 先読み/戻り読み
 
PHPUnit 4.0で追加されたwillReturn*()の紹介
PHPUnit 4.0で追加されたwillReturn*()の紹介PHPUnit 4.0で追加されたwillReturn*()の紹介
PHPUnit 4.0で追加されたwillReturn*()の紹介
 
書こう!正規表現 vol.3 ()
書こう!正規表現 vol.3 ()書こう!正規表現 vol.3 ()
書こう!正規表現 vol.3 ()
 
sedで複数行処理 使ってみようNを
sedで複数行処理 使ってみようNをsedで複数行処理 使ってみようNを
sedで複数行処理 使ってみようNを
 
ctagsでvimにひきこもる
ctagsでvimにひきこもるctagsでvimにひきこもる
ctagsでvimにひきこもる
 
書こう!正規表現 vol.2 文字クラス(例外)
書こう!正規表現 vol.2 文字クラス(例外)書こう!正規表現 vol.2 文字クラス(例外)
書こう!正規表現 vol.2 文字クラス(例外)
 
書こう!正規表現 vol.2 文字クラス(基本)
書こう!正規表現 vol.2 文字クラス(基本)書こう!正規表現 vol.2 文字クラス(基本)
書こう!正規表現 vol.2 文字クラス(基本)
 
書こう!ユニットテスト vol.2 どうやって?
書こう!ユニットテスト vol.2 どうやって?書こう!ユニットテスト vol.2 どうやって?
書こう!ユニットテスト vol.2 どうやって?
 
書こう!正規表現 vol.1 正規表現 is 何
書こう!正規表現 vol.1 正規表現 is 何書こう!正規表現 vol.1 正規表現 is 何
書こう!正規表現 vol.1 正規表現 is 何
 
書こう!ユニットテスト vol.1 ナンデ?
書こう!ユニットテスト vol.1 ナンデ?書こう!ユニットテスト vol.1 ナンデ?
書こう!ユニットテスト vol.1 ナンデ?
 
Cocproxy
CocproxyCocproxy
Cocproxy
 

Recently uploaded

Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 

Recently uploaded (10)

Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 

PHP foreachでの参照渡しに潜む罠