我覺得寫程式最難的是 命名,怎麼 變數命名、函式命名、類別命名..等,想一個有意義的名稱,挺困難的!當時,我看到 Anonymous function (匿名函式),仿佛看到一道曙光,終於可以省點命名的腦力。
Anonymous function, closure 在 Laravel 是經常被用到的方法之一,對於我而言,通常先會用功能,再去查查功能的名稱。習慣用 laravel 後,會忘記 PHP 是 laravel 基底,因此,看到 Closure (閉包) ,亦可以從 Anonymous function 找尋使用方式。Anonymous functions are implemented using the Closure class. -出至 PHP 文件
Anonymous function 在 PHP 也是有段進化史,喜歡考古的朋友,這邊有 PHP文件-Anonymous functions 和 wiki-匿名函式 可以爬爬。
;
,如:<?php
$sub = function ($a, $b){
return $a - $b;
};
echo $sub(5, 3).PHP_EOL; // 2
use
賦予 閉包 (closure) 函式變數,如:
()
內<?php
$message = 'hello';
$example = function () use ($message) {
return $message;
};
echo $example(); // hello
<?php
$numbers = [1, 2, 3, 4, 5];
// 使用匿名函數將每個數字 *2
$doubledNumbers = array_map(function ($number) {
return $number * 2;
}, $numbers);
print_r($doubledNumbers);
/* 輸出結果:
* 2
* 4
* 6
* 8
* 10
*/
<?php
$names = ['Tom', 'Mia', 'Amy'];
$greeting = 'Hello, ';
$sentences = array_map(
callback: function (string $name) use ($greeting) {
return $greeting.$name;
},
array: $names,
);
/* 輸出結果:
* Hello, Tom
* Hello, Mia
* Hello, Amy
*/
<?php
Route::get('/hello', function () {
return 'Hello, Laravel!';
});
Route::get('/hello/{name}', function ($name) {
return 'Hello, ' . $name . '!';
});
Anonymous Functions 和 Closures 用來減輕命名的負擔,使得程式更加靈活和有彈性,因此,在 Laravel 蠻常看到,故本文補充我當初疑惑 Anonymous Functions 和 Closures 可以怎麼用。
1 PHP文件-Anonymous functions
2 wiki-匿名函式
3 superglobals