カテゴリー:
クロージャ
閲覧数:532 配信日:2016-08-08 08:05
"use演算子" がない場合
$msg = 'こんにちは';
// "use" がない場合
$greeting = function () {
var_dump($msg);
};
var_dump($greeting); //object(Closure)#1 (0) {}
$greeting(); //NULL
"use演算子" がある場合
「useに指定した変数」をフィールドに含んだ Closure オブジェクトを作成
・引き継ぐ変数は、use で渡す必要がある
・use演算子を使用する場合は、実引数を指定しない
$msg = 'こんにちは';
// "use" がある場合
$greeting = function () use ($msg) {
var_dump($msg);
};
var_dump($greeting);
//object(Closure)#1 (1) {
// ["static"]=>
// array(1) {
// ["msg"]=>
// string(15) "こんにちは"
// }
//}
$greeting(); //string(15) "こんにちは"
function内 returnでの「use演算子」使用例
function getGreeter($msg) {
return function() use($msg) {
echo $msg;
};
}
$hello = getGreeter('hello');
var_dump($hello);
$hello();
/* 出力:
class Closure#1 (1) {
public $static =>
array(1) {
'msg' =>
string(5) "hello"
}
}
hello
*/