✨
PHPでクロージャを定義する
PHPは、JavaScriptのようにクロージャを定義することはできません。
<?php
$var = 10;
$result = array_map(function($num){
return $var * $num;
},[1,2]);
print_r($result)
?>
//PHP Notice: Undefined variable: var in /workspace/Main.php on line 5
varが未定義というエラーが出ているため、array_mapの第一引数に渡している無名関数内で$varを参照できていません。
例えば、このようなコードをJavaScriptで実行してみると
const value = 10;
const result = [1, 2].map((x) => value * x);
console.log(result); //[ 10, 20 ]
valueの値が参照できています。
ではPHPで関数の外側の変数の値を参照したい際はどうすればいいのか?
そこで use() を使うことで参照できます。
<?php
$var = 10;
$result = array_map(function($num)use($var){
return $var * $num;
},[1,2]);
print_r($result)
?>
/*
Array
(
[0] => 10
[1] => 20
)
*/
参照できました。
なぜuse()を使用しないと関数の外側の変数の値を参照できないのかは、不思議ですが…
(おそらくPHPには変数宣言キーワードがないから?)
以上、PHPでクロージャを定義する方法でした。
Discussion