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