توی این مطلب قراره یکی از ویژگیهایی که به PHP 7.4 اضافه شده رو با هم یاد بگیریم.
اسمش رو گذاشتم تابع فلشی! یا همون Arrow function که امروزه در زبانهای مختلف برنامه نویسی از جمله JavaScript وجود داره. حالا، نحوه تعریف تابع، به صورت سینتکس فلشی در زبان پیاچپی از نسخه 7.4 به بعد هم وجود داره.
امیدوارم تونسته باشین با اسم تابع فلشی کنار بیاین :)
کاربرد توابع فلشی در تعریف توابع Anonymous یا ناشناس هست. برای مثال تابعی که در قطعه کد زیر تعریف شده، یک تابع Anonymous هست:
$numbers = [1, 2, 3, 4]; $numbers = array_map(function($x) { return $x * 2; }, $numbers); // $numbers = [2, 4, 6, 8];
همونطور که میبینید شما باید کد زیادی بنویسید فقط برای اینکه بگید return $x * 2
به همین دلیل واضح، میایم این تابع رو با سینتکس تابع فلشی به صورت زیر مینویسیم:
$numbers = [1, 2, 3, 4]; $numbers = array_map(fn($x) => $x * 2, $numbers); // $numbers = [2, 4, 6, 8];
این روش خیلی خواناتر و دارای سینکتس بهتری است.
سینتکس توابع فلشی به صورت زیر است:
fn(parameter_list) => expr
کاربرد خوب دیگهایی که توابع فلشی دارند، این هست که شما دیگه نیازی به نوشتن use هم ندارید. مانند مثال زیر که هم به صورت تابع معمولی نوشته شده و هم به صورت تابع فلشی:
$y = 1; $fn1 = function ($x) use ($y) { return $x + $y; }; $fn2 = fn($x) => $x + $y;
این پیاده سازی در PHP فعلا فقط برای توابع یک خطی کاربرد داره و توابعی که دارای چند جمله یا statement باشند قابل استفاده نیست.
نکته بعدی که به صورت کوتاه بهش اشاره میکنم این هست که شما متغیرها رو فقط به صورت by-value میتونید به توابع فلشی بفرستید و امکان استفاده به صورت by-reference وجود نداره. مانند مثال زیر:
$x = 1; $fn = fn() => $x++; // Has no effect $fn(); var_dump($x); // int(1)
تمام.