Menu
Coddy logo textTech

העברה באמצעות הפניה

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-PHP של Coddy. שיעור 7 מתוך 68.

כברירת מחדל, כשמעבירים משתנה לפונקציה ב-PHP, הפונקציה מקבלת עותק של ערך המשתנה. פירוש הדבר הוא שכל שינוי שמתבצע בתוך הפונקציה אינו משפיע על המשתנה המקורי מחוץ לפונקציה.

עם זאת, לפעמים רוצים שפונקציה תשנה ישירות את המשתנה המקורי. כאן נכנסת לתמונה העברה באמצעות הפניה. כשמוסיפים סימן אמפרסנד (&) לפני שם הפרמטר בהגדרת הפונקציה, אומרים ל-PHP להעביר את המשתנה עצמו במקום עותק שלו:

<?php
function doubleValue(&$number) {
    $number = $number * 2;
}

$value = 10;
doubleValue($value);
echo $value;  // פלט: 20
?>

שימו לב איך $value השתנה מ-10 ל-20 אף שלא החזרנו שום דבר מהפונקציה. הפרמטר &$number יוצר קישור ישיר למשתנה המקורי $value, ומאפשר לפונקציה לשנות אותו ישירות.

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

challenge icon

אתגר

קל

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

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

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

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

נסו בעצמכם

<?php
// קראו את הקלטים
$initialQuantity = intval(fgets(STDIN));
$amountToAdd = intval(fgets(STDIN));
$amountToRemove = intval(fgets(STDIN));

// צרו משתנה לכמות
$quantity = $initialQuantity;

// TODO: צרו כאן את הפונקציה updateInventory שמקבלת פרמטר בהפניה

// TODO: קראו לפונקציה updateInventory עם הכמות בהפניה

// הציגו את הכמות המעודכנת
echo $quantity;
?>
quiz iconבחנו את עצמכם

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

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

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