use を使えば引き継げる。覚え書きとして、以下マニュアルからサンプルを抜粋。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
<?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