۱۳۹۹/۰۴/۱۹

استفاده از توابع Lambda و Closure در PHP

توابع Lambda و Closure در PHP ۱۳۹۸/۰۸/۰۱

لامبدا و Closure دو مفهوم کاربردی در توسعه نرم افزار در زبان php هستند.‎و در اکثر زبان های برنامه نویسی مثل javascript python ,.. از آنها استفاده میشود   .از نسخه ۵.۳ php  امکان استفاده از این توابع برای توسعه دهندگان پی اچ پی فراهم شده است.

مقدار برگشتی توابع بی نام  یا Lambda میتوانند به یک متغییر اختصاص داده شوند و یا بعنوان آرگومان یه یک فانکشن  به توابع یا متد های دیگر پاس شوند‎.
 درواقع این  توابع یک تابع ساده هستند که نامی ندارند ولی می توان مقدار برگشتی آنها را به یک متغییر اختصاص داد.‎
 

استفاده از توابع لامبدا  Lambda در PHP

از توابع 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

توابع Closure در PHP

این نوع توابع دقیقا مانند توابع لامبدا در php تعریف میشوند و عمل میکنند ولی با امکانات بیشتر .بر خلاف توابع لامبدا در Closure Function  ها ما می توانیم از متغییر های  سراسری با استفاده از کلمه کلیدی use استفاده کنیم.

$base = 100;
$sum = function ($a, $b) use ($base) {
    return $a + $b + $base;
};echo $sum(5, 5); // 110

تفاوت توابع Lambda و Closure

 درواقع توابع closure  یک نوع توابع  Lambda هستند که در بدنه آنها می توان با استفاده از کلمه کلیدی use از متغییر های سراسری استفاده کرد.

چرا از توابع بی نام با Lambda استفاده کنیم؟

با استفاده از این نوع توابع می توانیم کدهای تمیز تر و خوانا تری داشته باشیم به مثال زیر توجه کنید .

usort($myArray, function ($a, $b) {
    return $a < $b;
});

مثال بالا بدون استفاده از توابع  Lambda در پی اچ پی

function mySort ($a, $b) {
    return $a < $b;
}
usort($myArray, 'mySort');

 

 


رای :

توابع لامبدا

PHP

Lambda

Closure

ارسال نظر
Copyright © All right reserved.