端くれプログラマの備忘録 PHP [PHP] クロージャーが親のスコープから変数を引き継ぐ方法

[PHP] クロージャーが親のスコープから変数を引き継ぐ方法

use を使えば引き継げる。覚え書きとして、以下マニュアルからサンプルを抜粋。

<?php
$message = 'hello';

// "use" がない場合
$example = function () {
  var_dump($message);
};
$example();

// $message を引き継ぎます
$example = function () use ($message) {
  var_dump($message);
};
$example();

// 引き継がれた変数の値は、関数が定義された時点のものであり、
// 関数が呼ばれた時点のものではありません
$message = 'world';
$example();

// $message をリセットします
$message = 'hello';

// 参照渡しで引き継ぎます
$example = function () use (&$message) {
  var_dump($message);
};
$example();

// 親のスコープで変更された値が、
// 関数呼び出しの内部にも反映されます
$message = 'world';
$example();

// クロージャは、通常の引数も受け付けます
$example = function ($arg) use ($message) {
  var_dump($arg . ' ' . $message);
};
$example("hello");
?>

参考サイト

PHP: 無名関数 – Manual
http://php.net/manual/ja/functions.anonymous.php

PHPでクロージャーを使う – Qiita
http://qiita.com/hugo-sb/items/3e344486658e3cfbd407