本篇為PHP系列。
在 JavaScript 中有個好用的箭頭函式,用起來很簡短,但對於不懂的人來說,會覺得有點魔幻,覺得很神奇卻又不是那麼好理解,因此常常被前端工程師拿來炫技,那什麼是箭頭函式呢?
我們來看下面的 JavaScript 範例,我們有一個 array,想要把其中的每個值都變成兩倍,那可以使用 map 搭配匿名函式來這樣做:
let numbers = [1, 2, 3, 4];
let doubleNumbers = numbers.map(function(number) {
return number * 2;
});
這樣我們的 doubleNumbers
就會是 [2, 4, 6, 8]
。
而上面這個範例,若改成使用箭頭函式的話,就會像這樣,變得比較簡潔:
let numbers = [1, 2, 3, 4];
let doubleNumbers = numbers.map((number) => number * 2);
這樣簡潔的特性,是箭頭函式深受喜好的原因之一,而這樣的箭頭函式在 PHP 也可以使用了。
PHP Arrow Functions - 箭頭函式
用法
PHP 在 7.4 版加入了 Arrow Functions 的功能,作為更簡潔的 Anonymous functions 匿名函式用法。
我們先來看傳統的 PHP 匿名函式如何使用,我們一樣把 array 中的每個值都變成兩倍:
$numbers = [1, 2, 3, 4];
$doubleNumbers = array_map(function($number) {
return $number * 2;
}, $numbers);
這樣 $doubleNumbers
就是 [2, 4, 6, 8]
。
而上面這個範例,若改成使用 PHP 的箭頭函式的話,會變成這樣,看起來也是比較簡短:
$numbers = [1, 2, 3, 4];
$doubleNumbers = array_map(fn($number) => $number * 2, $numbers);
不需要 return
,也省略了 {}
,會直接回傳 =>
的運算結果,也就是 $number * 2
。
而箭頭函式跟匿名函式相比,還有另一個最大的好處是,可以減少使用 use
。什麼意思呢?
舉例來說,我們今天想要把倍數提取成一個變數,讓我隨時可以改變,使用匿名函式的話,就會像這樣:
$numbers = [1, 2, 3, 4];
$mutiple = 3;
array_map(function($number) use ($mutiple) {
return $number * $mutiple;
}, $numbers);
還會需要額外設定使用 $mutiple
,但 PHP 箭頭函式會自動代入 scope 外的變數,因此可以省掉 use
:
$numbers = [1, 2, 3, 4];
$mutiple = 3;
array_map(fn($number) => $number * $mutiple, $numbers);
可以省掉 use
對我來講是一個很大的誘因去使用箭頭函式。
我認為的小缺陷
其中有幾個我認為的小缺陷,一個是仍然需要透過 fn
關鍵字才可以使用箭頭函式,我會覺得有點多餘。
另外一個是,沒辦法寫多行,什麼意思呢?因為箭頭函式省略掉了{}
,但同時也不允許我們使用{}
,因此像下方的多行用法,目前是不被允許的,我覺得有點可惜,希望以後的版本可以有機會使用。
fn() => {
$a = 1;
$b = 2;
return $a + $b;
}
更多PHP相關文章,請參考:PHP系列