PHP/無名関数

PHP/無名関数

バージョンと製造年月日

  • 2011-06-03
  • PHP5.3

無名関数の作り方

PHP5.3から使えるようになった。これは使いたい!

JavaScriptと同様に作れる。

$hoge = function($a){
    echo $a;
};
 
$hoge("ほげ");

このように使う。

外で定義された変数を無名関数内部に持ち込む

クロージャの特徴的な機能のひとつに定義されたスコープを実行時に持ち込めるというものがある。なのでPHPでもやってみる。

$outer = "外からだよ";
$hoge = function($a){
    echo $a . $outer;
};
 
$hoge("ほげ");

こいつを実行するとouterなんて変数分かんねーよボケ!というエラーが出るのでJavaScriptっぽく記述しても内部には持ち込めないようだ。

PHP: 無名関数 - Manualによるとuseキーワードで持ち込める

$outer = "外からだよ";
$hoge = function($a) use($outer){
    echo $a . $outer;
};
 
$hoge("ほげ");

これで動く

$outer = "外からだよ";
$hoge = function($a) use($outer){
    echo $a . $outer;
};
 
$hoge("ほげ");

ここで少し意地悪をして

$outer = "外からだよ";
$hoge = function($a) use($outer){
    echo $a . $outer;
};
 
$outer = $outer . "変わるよ";
 
$hoge("ほげ");

こう記述しても「変わるよ」表示されず。つまりuseを使ってるのに引数で値渡ししているのと同じ。つまり作る時点でのサブ的なパラメータを与えているだけ。(使う時点ではもう一体化してるところがポイント)

ここでアンバサンドをつけてuseで引きこむと変数の値ではなく変数そのものを引き込むことができるようになる

$outer = "外からだよ";
$hoge = function($a) use(&$outer){
    echo $a . $outer;
};
 
$outer = $outer . "変わるよ";
 
$hoge("ほげ");

これだと「変わるよ」が出る。

タグ

php/basic/anonymous_function.txt · 最終更新: 2019-07-08 19:32 by ore