5分でわかるphpのクロージャ(web公開版)
DESCRIPTION
PHPカンファレンス関西(2011/04/02) 懇親会LTでのプレゼン資料ですTRANSCRIPT
![Page 1: 5分でわかるPHPのクロージャ(web公開版)](https://reader037.vdocuments.pub/reader037/viewer/2022100506/55615554d8b42a8a7d8b531a/html5/thumbnails/1.jpg)
2011/04/02 5分でわかるPHPのクロージャ
1
5分でわかるPHPのクロージャ
@hajikami
![Page 2: 5分でわかるPHPのクロージャ(web公開版)](https://reader037.vdocuments.pub/reader037/viewer/2022100506/55615554d8b42a8a7d8b531a/html5/thumbnails/2.jpg)
2011/04/02 5分でわかるPHPのクロージャ
2
私
自己紹介します
![Page 3: 5分でわかるPHPのクロージャ(web公開版)](https://reader037.vdocuments.pub/reader037/viewer/2022100506/55615554d8b42a8a7d8b531a/html5/thumbnails/3.jpg)
2011/04/02 5分でわかるPHPのクロージャ
3
私
● @hajikami● http://my-rest.icca.jp/blog/
– PHPでできる関数型プログラミング● 社会人2年目● PHPer…のはず
– 仕事ではPro*CやJavaを読んでる
![Page 4: 5分でわかるPHPのクロージャ(web公開版)](https://reader037.vdocuments.pub/reader037/viewer/2022100506/55615554d8b42a8a7d8b531a/html5/thumbnails/4.jpg)
2011/04/02 5分でわかるPHPのクロージャ
4
【前提:対象者】PHPで関数が作れる人
話をする前に
![Page 5: 5分でわかるPHPのクロージャ(web公開版)](https://reader037.vdocuments.pub/reader037/viewer/2022100506/55615554d8b42a8a7d8b531a/html5/thumbnails/5.jpg)
2011/04/02 5分でわかるPHPのクロージャ
5
前提:これがわかること
<?phpfunction less_than($a, $b) { return ($a < $b);}
![Page 6: 5分でわかるPHPのクロージャ(web公開版)](https://reader037.vdocuments.pub/reader037/viewer/2022100506/55615554d8b42a8a7d8b531a/html5/thumbnails/6.jpg)
2011/04/02 5分でわかるPHPのクロージャ
6
これで銅鑼がなっても大丈夫!(註:本LTでは5分を過ぎると銅鑼が鳴って強制終了する)
結論
![Page 7: 5分でわかるPHPのクロージャ(web公開版)](https://reader037.vdocuments.pub/reader037/viewer/2022100506/55615554d8b42a8a7d8b531a/html5/thumbnails/7.jpg)
2011/04/02 5分でわかるPHPのクロージャ
7
結論
● クロージャ● 関数Aの中にある、関数Bのこと● 関数Aで使っている変数は、
関数Bでも使うことが出来る– 引数として与えなくても、使える
![Page 8: 5分でわかるPHPのクロージャ(web公開版)](https://reader037.vdocuments.pub/reader037/viewer/2022100506/55615554d8b42a8a7d8b531a/html5/thumbnails/8.jpg)
2011/04/02 5分でわかるPHPのクロージャ
8
関数
↓
無名関数
↓
クロージャ
流れ
![Page 9: 5分でわかるPHPのクロージャ(web公開版)](https://reader037.vdocuments.pub/reader037/viewer/2022100506/55615554d8b42a8a7d8b531a/html5/thumbnails/9.jpg)
2011/04/02 5分でわかるPHPのクロージャ
9
関数
<?php
// これが普通の関数
function less_than($a, $b) {
return ($a < $b);
}
// 呼び出しはこんな感じ
if(less_than($a, $b)) ...
![Page 10: 5分でわかるPHPのクロージャ(web公開版)](https://reader037.vdocuments.pub/reader037/viewer/2022100506/55615554d8b42a8a7d8b531a/html5/thumbnails/10.jpg)
2011/04/02 5分でわかるPHPのクロージャ
10
無名関数
<?php
// その名のとおり、名前のない関数
function($a, $b) {
return ($a < $b);
}
![Page 11: 5分でわかるPHPのクロージャ(web公開版)](https://reader037.vdocuments.pub/reader037/viewer/2022100506/55615554d8b42a8a7d8b531a/html5/thumbnails/11.jpg)
2011/04/02 5分でわかるPHPのクロージャ
11
無名関数
<?php
// 無名関数は変数に入れられるよ
$less_than = function($a, $b) {
return ($a < $b);
}
// 呼び出しはこんな感じ
if($less_than($a, $b)) ...
![Page 12: 5分でわかるPHPのクロージャ(web公開版)](https://reader037.vdocuments.pub/reader037/viewer/2022100506/55615554d8b42a8a7d8b531a/html5/thumbnails/12.jpg)
2011/04/02 5分でわかるPHPのクロージャ
12
無名関数
<?php
function some_process($a) {
// 関数内で作れば、ローカルな関数が作れるよ!
$less_than = function($a, $b) {
return ($a < $b);
}
// 呼び出しはこんな感じ
if($less_than($a, $b)) ...
}
![Page 13: 5分でわかるPHPのクロージャ(web公開版)](https://reader037.vdocuments.pub/reader037/viewer/2022100506/55615554d8b42a8a7d8b531a/html5/thumbnails/13.jpg)
2011/04/02 5分でわかるPHPのクロージャ
13
クロージャじゃない
<?php
function some_process($a) {
// $aを毎回与えるの手間だし、これじゃだめなの?
$less_than_a = function($b) { // ダメです!
return ($a < $b);
}
// 呼び出しはこんな感じ?
if($less_than_a($b)) ...
}
![Page 14: 5分でわかるPHPのクロージャ(web公開版)](https://reader037.vdocuments.pub/reader037/viewer/2022100506/55615554d8b42a8a7d8b531a/html5/thumbnails/14.jpg)
2011/04/02 5分でわかるPHPのクロージャ
14
クロージャ
<?php
function some_process($a) {
// useキーワードを使ってください!
$less_than_a = function($b) use ($a) {
return ($a < $b);
}
// 呼び出しはこんな感じ
if($less_than_a($b)) ...
}
![Page 15: 5分でわかるPHPのクロージャ(web公開版)](https://reader037.vdocuments.pub/reader037/viewer/2022100506/55615554d8b42a8a7d8b531a/html5/thumbnails/15.jpg)
2011/04/02 5分でわかるPHPのクロージャ
15
やった!銅鑼がなってない!
まとめ
![Page 16: 5分でわかるPHPのクロージャ(web公開版)](https://reader037.vdocuments.pub/reader037/viewer/2022100506/55615554d8b42a8a7d8b531a/html5/thumbnails/16.jpg)
2011/04/02 5分でわかるPHPのクロージャ
16
まとめ
● クロージャ● 関数Aの中にある、関数Bのこと
– some_processの中にある、$less_than_a● 関数Aで使っている変数は、
関数Bでも使うことが出来る– 引数として与えなくても、使える– 引数がだらだらと増えることが無くなる!
● PHPの場合– 5.3.0 以降で使える– useキーワードが必要– 変数に無名関数を格納すると使いやすいよ!
![Page 17: 5分でわかるPHPのクロージャ(web公開版)](https://reader037.vdocuments.pub/reader037/viewer/2022100506/55615554d8b42a8a7d8b531a/html5/thumbnails/17.jpg)
2011/04/02 5分でわかるPHPのクロージャ
17
ありがとうございました!
以上