lambdas, closures ופונקציות אנונימיות ב-PHP

מחבר:
בתאריך:

lambda זה השם שבו מקובל לכנות פונקציה אנונימית ב-PHP, ופונקציה אנונימית היא פשוט פונקציה ללא שם.

לדוגמה:

function($name){
    return "hello $name";
};

שמתם לב שחסר לפונקציה שם. זו לא טעות זה מה שהופך אותה לפונקציה אנונימית. העובדה שאין לה שם.

 

איך קוראים לפונקציה אנונימית?

הבעיה של פונקציה ללא שם היא שלא ניתן לקרוא לה, והפתרון הוא להציב את הפונקציה האנונימית למשתנה.

לדוגמה:

$sayHi = function($name){
    return "hello $name";
};

ולאחר שהצבנו את הפונקציה האנונימית למשתנה, אנחנו יכולים בקלות להשתמש בפונקציה.

לדוגמה:

echo $sayHi("Chompi"); // hello Chompi 

מה זה? $ לפני שם הפונקציה? כן. זו לא טעות. כך משתמשים בפונקציה אנונימית.

ועכשיו אחרי שראינו כיצד להשתמש בפונקציה אנונימית (סליחה, למבדה) ב-PHP, נעשה היכרות עם האחיין המשוכלל יותר שלה, ה-closure.

 

מה זה closure?

closure הוא קודם כל פונקציה אנונימית, ולהבדיל מ-lambda הוא גם יכול לקבל משתנים מהחוץ באמצעות מילת המפתח use.

$bless = "have a nice day";
$sayHi1 = function($name) use($bless){
	return "hello $name, $bless";
};
echo $sayHi1("Chompi"); // hello Chompi, have a nice day

closure יכול להואיל במיוחד כשמשתמשים בפונקציות callback, דוגמת:
array_reduce, array_filter, array_map

בואו נראה דוגמה עם array_walk:

$names = array("Chompi","Enshem","Rega","Dodli");
array_walk($names, function($name){
	echo "hello, $name";
});

מערכת Laravel משתמשת באופן נרחב ב-closures במתודות העזר. לדוגמה, המתודה הבאה מחזירה את המחרוזת "ברוכים הבאים" למשתמשים שמגיעים לדף הבית.

Route::get('/', function()
{
    return 'Welcome home';
});

 

למדריכים נוספים בנושא של PHP , תכנות לרשת האינטרנט, ועוד.

 

אהבתם? לא אהבתם? דרגו!

0 הצבעות, ממוצע 0 מתוך 5 כוכבים

 

הוסף תגובה חדשה

 

= 6 + 9

תמונת המגיב

ניב בתאריך: 18.07.2018

זה רק אני או שהדוגמה שהצגת ב-LARAVEL משתמשת ב- lambda ולא ב- closure? הרי אין כאן נתונים משתנים או שימוש ב-USE.... מה אני מפספס? ואגב- תוכל לפרט בבקשה על היתרונות שבשימוש ב lambda + closure? עד כמה שהבנתי, זה לא בדיוק פותר בעיה טכנולוגית, הרי באותה מידה יכולת לכתוב פונקציה רגילה ואז פשוט לקרוא לה כשאתה עובד עם פונקציות כמו array_walk וכו' זה כדי לחסוך בקוד? מה היתרונות הממשיים של זה? תודה!