Menu
Coddy logo textTech

סגירות ו-'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).

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

challenge icon

אתגר

קל

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

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

פורמט הקלט: שתי שורות — בשורה הראשונה מופיע אחוז ההנחה (מספר), ובשורה השנייה מופיע המחיר המקורי (מספר שעשוי לכלול ספרות עשרוניות)

הפלט הצפוי: המחיר הסופי לאחר החלת ההנחה

נסו בעצמכם

<?php
// קראו את הקלטים
$discount = floatval(fgets(STDIN));
$price = floatval(fgets(STDIN));

// TODO: צרו פונקציה אנונימית שלוכדת את אחוז ההנחה באמצעות 'use'
// הפונקציה צריכה לקבל פרמטר של מחיר ולהחזיר את המחיר הסופי לאחר ההנחה


// TODO: קראו לפונקציה האנונימית עם המחיר ושמרו את התוצאה


// הציגו את המחיר הסופי
echo $finalPrice;
?>
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

תרגלו בעצמכם: קומפיילר PHP אונליין