[PHP]無名関数を使う

使い方

一般的な関数の使い方と異なり、関数名をつけず変数に代入することが出来る。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

参考

無名関数

[ PHP ] 無名関数 use 構文でパラメータの値渡しと参照渡しの違い

PHPのクロージャ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

two + 16 =

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください