نحوه تعریف:
یک کلوژر در PHP با استفاده از کلمه کلیدی function بدون نام فانکشن تعریف میشود. میتوان آن را به یک متغیر اختصاص داد و مانند هر فانکشن دیگری، با فراخوانی نام متغیر میتوان آن را اجرا کرد.
$my_function = function () {
// Code
};تفاوت با توابع عادی:
تفاوت اصلی کلوژرها با توابع عادی در این است که کلوژرها میتوانند متغیرهای خارج از دامنهی تعریف شدهی خود را با استفاده از کلیدواژه use "بگیرند". این امر باعث میشود کلوژرها برای پیادهسازی پترنهای طراحی خاص و برای مواردی که نیاز به حفظ حالت بین اجراها است، مناسب باشند.
کلوژر ها بر خلاف توابع عادی بدون نام هستند.
آرگومان های ورودیها و کلمه کلیدی use:
مانند توابع عادی، کلوژرها میتوانند پارامترهای ورودی داشته باشند. این پارامترها در زمان فراخوانی کلوژر به آن ارسال میشوند.
$my_function = function ($text) {
echo $text
};
$my_function('hello');
// helloبرای دسترسی به متغیرهای خارج از دامنهی کلوژر، از کلمه کلیدی use استفاده میشود. این متغیرها در زمان تعریف کلوژر به آن "بسته" میشوند و مقادیر آنها حفظ میشود، حتی اگر بعداً تغییر کنند.
$text = 'hello',
$my_function = function () use ($text) {
echo $text
};
$my_function();
// hello
مثال:
فرض کنید میخواهیم یک کلوژر بنویسیم که یک عدد را به عنوان ورودی گرفته و آن را با عدد دیگری که در زمان تعریف کلوژر مشخص شده، جمع کند.
$anotherNumber = 5;
$addition = function ($number) use ($anotherNumber) {
return $number + $anotherNumber;
};
echo $addition(3); // 8
کلوژ هارا میتوان به عنوان ورودی به متد ها یا توابع دیگر ارسال کرد:
function execute($action) {
$action();
}
execute(function () {
echo 'hello';
});———
Arrow functions، یک قابلیت نوین و سادهتر برای نوشتن توابع ناشناس (Anonymous functions) هستند. این توابع به خصوص برای تعریف توابع کوچک و کاربردی طراحی شدهاند که میتوانند بلافاصله اجرا شوند.
نحوه تعریف:
Arrow functions با استفاده از کلمه کلیدی fn به جای کلمهکلیدی function تعریف میشوند. ساختار کلی آنها به این شکل است:
$function = fn($arg1, $arg2, ...) => expression;
بدنهی arrow function تنها شامل یک عبارت (expression) است و نیازی به استفاده از return برای برگرداندن نتیجه نیست. نتیجهی این عبارت به طور خودکار برگردانده میشود.
تفاوت با فانکشنهای عادی:
Arrow functions بر خلاف توابع عادی، همیشه ناشناس هستند.
نتیجه به طور خودکار برگردانده میشود، بدون نیاز به استفاده از return.
تفاوت با کلوژرها:
Arrow functions به طور خودکار تمام متغیرهای مورد استفاده را از دامنهی بیرونی "میگیرند"، بنابراین نیازی به استفاده از کلمهکلیدی use نیست.
کوتاهتر و مختصرتر از کلوژرها هستند و برای تعاریف تک خطی بهینه شدهاند.
مثال :
فرض کنید میخواهیم یک آرایه از اعداد را دو برابر کنیم. میتوانیم از arrow function در تابع array_map استفاده کنیم:
$numbers = [1, 2, 3, 4];
$doubled = array_map(fn($number) => $number * 2, $numbers);
print_r($doubled);
//Array ( [0] => 2 [1] => 4 [2] => 6 [3] => 8 )
در این مثال، ما از یک arrow function به عنوان callback در array_map استفاده کردیم تا هر عنصر آرایه را دو برابر کنیم. این نمونه نشان دهندهی سادگی و کارایی بالای arrow functions در PHP برای انجام عملیاتهای مختصر و مفید است. Arrow functions به ویژه هنگام کار با آرایهها، کالکشنها و دیتا استراکچرهایی که نیاز به ترانسفورمیشن دارند، مفید هستند.
👤 AmirHossein
💎 Channel: @DevelopixPHP