העברה באמצעות הפניה
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-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, ומאפשר לפונקציה לשנות אותו ישירות.
הטכניקה הזאת שימושית במיוחד כשצריך שפונקציה תשנה כמה משתנים או כשעובדים עם מבני נתונים גדולים שהעתקתם אינה יעילה.
אתגר
קלצרו פונקציה בשם updateInventory שמקבלת שלושה פרמטרים: הפניה למשתנה כמות, כמות להוספה וכמות להסרה. הפונקציה צריכה לשנות את הכמות המקורית על ידי הוספת הכמות הראשונה והפחתת הכמות השנייה.
תקבלו שלוש קלטים: הכמות ההתחלתית, הכמות להוספה והכמות להסרה. קראו את שלושת הקלטים, צרו משתנה עם הכמות ההתחלתית, קראו לפונקציה updateInventory תוך העברת הכמות באמצעות הפניה, יחד עם הכמויות להוספה ולהסרה, והדפיסו את הכמות המעודכנת.
פורמט הקלט: שלוש שורות - השורה הראשונה מכילה את הכמות ההתחלתית (מספר), השורה השנייה מכילה את הכמות להוספה (מספר), והשורה השלישית מכילה את הכמות להסרה (מספר)
הפלט הצפוי: הכמות המעודכנת לאחר ההוספה וההסרה
נסו בעצמכם
<?php
// קראו את הקלטים
$initialQuantity = intval(fgets(STDIN));
$amountToAdd = intval(fgets(STDIN));
$amountToRemove = intval(fgets(STDIN));
// צרו משתנה לכמות
$quantity = $initialQuantity;
// TODO: צרו כאן את הפונקציה updateInventory שמקבלת פרמטר בהפניה
// TODO: קראו לפונקציה updateInventory עם הכמות בהפניה
// הציגו את הכמות המעודכנת
echo $quantity;
?>השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
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 אונליין