لامبدا و Closure دو مفهوم کاربردی در توسعه نرم افزار در زبان php هستند.و در اکثر زبان های برنامه نویسی مثل javascript python ,.. از آنها استفاده میشود .از نسخه ۵.۳ php امکان استفاده از این توابع برای توسعه دهندگان پی اچ پی فراهم شده است.
مقدار برگشتی توابع بی نام یا Lambda میتوانند به یک متغییر اختصاص داده شوند و یا بعنوان آرگومان یه یک فانکشن به توابع یا متد های دیگر پاس شوند.
درواقع این توابع یک تابع ساده هستند که نامی ندارند ولی می توان مقدار برگشتی آنها را به یک متغییر اختصاص داد.
از توابع Lambda برای پردازش های کوچک و یا یک بار مصرف برروی داده ها استفاده میشود.و بدلیل اینکه ابن توابع نامی ندارند نمی توانید آنها را مانند توابع دیگر صدا بزنید .
$sum = function ($a, $b) { return $a + $b; }; echo $sum(5, 5); // 10
هنگام استفاده از توابع lambda باید یه این نکته توجه کتید که در این توابع نمی توانید به متغییر های خارج از بدنه تابع دسترسی داشته باشید و هنگام فرخوانی متغییر خارج از فضای نام بدنه تابع با خطا مواجه خواهید شد.
$base = 100;
$sum = function ($a, $b) {
return $a + $b + $base;
};
echo $sum(5, 5); // Notice: Undefined variable: base
این نوع توابع دقیقا مانند توابع لامبدا در php تعریف میشوند و عمل میکنند ولی با امکانات بیشتر .بر خلاف توابع لامبدا در Closure Function ها ما می توانیم از متغییر های سراسری با استفاده از کلمه کلیدی use استفاده کنیم.
$base = 100;
$sum = function ($a, $b) use ($base) {
return $a + $b + $base;
};echo $sum(5, 5); // 110
درواقع توابع closure یک نوع توابع Lambda هستند که در بدنه آنها می توان با استفاده از کلمه کلیدی use از متغییر های سراسری استفاده کرد.
با استفاده از این نوع توابع می توانیم کدهای تمیز تر و خوانا تری داشته باشیم به مثال زیر توجه کنید .
usort($myArray, function ($a, $b) {
return $a < $b;
});
مثال بالا بدون استفاده از توابع Lambda در پی اچ پی
function mySort ($a, $b) {
return $a < $b;
}
usort($myArray, 'mySort');