🍉
クロージャってなぁに👀??
今回はクロージャについてまとめてみました。
①下記のコードを見てみると、
use Illuminate\Support\Facades\Validator;
$validator = Validator::make($request->all(), [
'title' => [
'required',
'max:240',
function ($attribute, $value, $fail) {
if ($value === 'foo') {
$fail('The '.$attribute.' is invalid.');
}
},
],
]);
②下記のコードを見てみるとメソッドは使われておらず、functionのみで書かれ、そのfunctionを変数に入れています。
$arr = [
'id' => 7,
'item' => function ($num) {
return $num * 9;
}
];
$mul_num = 10;
$func_use = function ($num) use ($mul_num) {
return $num * $mul_num * 9;
};
$func = function ($num) {
return $num *9;
};
下記のコードの、$funcにはClosureというクラスが入っています。まだ実行はされおらず、Closureというクラスのインスタンスがある状態です。実行はまだ行われていません。
function ($num)の値は動作される瞬間に代入された値で決まります。
$func = function ($num) {
return $num *9;
};
echo $func(3);
コマンドラインで下記を実行します。
php -r "echo $func(3);;"
↓ すると下記のような"3"という結果が返ってきます。
3%
※コマンドラインで実行した際に (結果)% と返ってきますが、%は特に意味は無いので気にしないでください。
☆その他☆
useを使って、呼び出す前に別の所で使ってた値をクロージャ内で使う。
$num_x = 4;
$func = function ($num) use ($num_x) {
return $num * $num_x;
}
echo $func(4);
}
コマンドラインで下記を実行します。
php -r "echo $func(4);;"
↓ すると下記のような"4"という結果が返ってきます。
4%
※コマンドラインで実行した際に (結果)% と返ってきますが、%は特に意味は無いので気にしないでください。
【まとめ】
上記で解説した①や②のコードを無名関数やクロージャと呼びます。
Discussion