סגירות ו-'use'
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-PHP של Coddy. שיעור 2 מתוך 68.
כברירת מחדל, פונקציות אנונימיות יכולות לגשת רק למשתנים שמועברים אליהן כפרמטרים. אבל מה אם צריך שהסגירה שלך תוכל לגשת למשתנה מהתחום המקיף? כאן נכנסת לתמונה מילת המפתח use.
מילת המפתח use מאפשרת ל־closure ״ללכוד״ משתנים מהתחום של הפונקציה העוטפת ולהשתמש בהם בתוך הפונקציה:
<?php
$message = "Welcome";
$greeting = function($name) use ($message) {
echo $message . ", " . $name . "!";
};
$greeting("Bob"); // פלט: Welcome, Bob!
?>שימו לב ש-$message מוגדר מחוץ לפונקציה, אבל על ידי הוספת use ($message) אחרי רשימת הפרמטרים, הסגירה יכולה לגשת למשתנה הזה ולהשתמש בו. אפשר ללכוד כמה משתנים על ידי הפרדתם בפסיקים: use ($var1, $var2).
התכונה הזו הופכת סגירות לחזקות הרבה יותר ומאפשרת להן לעבוד עם נתונים מההקשר שסביבן, תוך שמירה על הגמישות של פונקציות אנונימיות.
אתגר
קלצרו פונקציה אנונימית שלוכדת אחוז הנחה מהתחום המקיף באמצעות מילת המפתח use. הפונקציה צריכה לקבל מחיר כפרמטר ולהחזיר את המחיר הסופי לאחר החלת ההנחה.
תקבלו שתי קלטים: אחוז ההנחה והמחיר המקורי. קראו את שני הקלטים, צרו closure שלוכד את אחוז ההנחה, קראו ל-closure עם המחיר והדפיסו את המחיר הסופי לאחר ההנחה.
פורמט הקלט: שתי שורות — בשורה הראשונה מופיע אחוז ההנחה (מספר), ובשורה השנייה מופיע המחיר המקורי (מספר שעשוי לכלול ספרות עשרוניות)
הפלט הצפוי: המחיר הסופי לאחר החלת ההנחה
נסו בעצמכם
<?php
// קראו את הקלטים
$discount = floatval(fgets(STDIN));
$price = floatval(fgets(STDIN));
// TODO: צרו פונקציה אנונימית שלוכדת את אחוז ההנחה באמצעות 'use'
// הפונקציה צריכה לקבל פרמטר של מחיר ולהחזיר את המחיר הסופי לאחר ההנחה
// TODO: קראו לפונקציה האנונימית עם המחיר ושמרו את התוצאה
// הציגו את המחיר הסופי
echo $finalPrice;
?>השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1פונקציות מתקדמות
פונקציות אנונימיותסגירות ו-'use'פונקציות חץפונקציות callbackשימוש ב-'call_user_func'פונקציות משתנותהעברה באמצעות הפניהפונקציות רקורסיביותסיכום: מגוון פונקציות4מערכים רב־ממדיים
יצירת מערך דו־ממדיגישה לאיברי מערך דו־ממדישינוי איברי מערך דו־ממדימעבר באמצעות לולאות מקוננותמערכים אסוציאטיביים דו־ממדייםסיכום: תרגיל רשת פשוטה2מניפולציות מתקדמות במערכים
הוספה באמצעות 'array_push'הסרה באמצעות 'array_pop'הוספה לתחילת המערך באמצעות 'array_unshift'הסרה מתחילת המערך באמצעות 'array_shift'מיזוג מערכים ממוספריםמיזוג מערכים אסוציאטיבייםחילוץ באמצעות 'array_slice'בדיקת ערכים באמצעות 'in_array'חיפוש מפתחות באמצעות 'array_search'סיכום: תרגיל רשימת השמעה3מיון מערכים
מיון מערכים עם אינדקסים בסדר עולהמיון מערכים עם אינדקסים בסדר יורדמיון מערכים אסוציאטיביים לפי ערךמיון מערכים אסוציאטיביים לפי מפתחמיון בסדר טבעימיון מותאם אישית באמצעות 'usort'סיכום: מיון טבלת מוביליםתרגלו בעצמכם: קומפיילר PHP אונליין