使い方
一般的な関数の使い方と異なり、関数名をつけず変数に代入することが出来る。PHP5.3以降から使用可能。
関数の外部で定義した変数は use を使用することで引き継ぐことが出来る。
$message = 'hello';
$example = function() use ($message)
{
var_dump($message);
};
$example(); // string(5) "hello"
ただし引き継いだ変数は関数が定義された時点の値となる。
$message = 'hello';
$example = function() use ($message)
{
var_dump($message);
};
$message = 'world';
$example(); // string(5) "hello"
引き継いだ変数を変更可能にするためには、変数を参照渡しで関数に渡す。
$example = function() use (&$message)
{
var_dump($message);
};
$message = 'world';
$example(); // string(5) "world"
無名関数内に無名関数を定義してクロージャとする使い方もある。
$func = function() {
$x = 0;
return function() use (&$x)
{
return $x++;
};
};
$func2 = $func();
echo $func2(), PHP_EOL; // 0
echo $func2(), PHP_EOL; // 1
echo $func2(), PHP_EOL; // 2