תחי ישראל - אין לנו ארץ אחרת

תחי ישראל -אין לנו ארץ אחרת

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 כוכבים

 

 

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

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

שימו לב! הסקריפטים במדריכים מיועדים למטרות לימוד בלבד. כשאתם עובדים על הפרויקטים שלכם אתם צריכים להשתמש בספריות וסביבות פיתוח מוכחות, מהירות ובטוחות.

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

השימוש שלך באתר מהווה ראייה להסכמתך עם הכללים והתקנות שנוסחו בהסכם תנאי השימוש.

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

 

 

ענה על השאלה הפשוטה הבאה כתנאי להוספת תגובה:

דג למים הוא כמו ציפור ל...?

 

תמונת המגיב

ניב בתאריך: 18.07.2018

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