A reference parameter can update the caller variable directly.

reference parameter An `&` before a parameter lets assignments inside the function update the caller's variable.

Reference Parameters

score
reference_parameters.php
Replay: real traced execution (multi-file project)
<?php
function addPoints(int &$score, int $bonus): void {
    $score = $score + $bonus;
}

$score = 10;
addPoints($score, 5);

echo "score=" . $score . "\n";
<?php
function addPoints(int &$score, int $bonus): void {
    $score = $score + $bonus;
}

$score = 4;
addPoints($score, 5);

echo "score=" . $score . "\n";
<?php
function addPoints(int &$score, int $bonus): void {
    $score = $score + $bonus;
}

$score = 20;
addPoints($score, 5);

echo "score=" . $score . "\n";
  1. $score ← 10

    6$score→ 10 = 10; //@score=4, 207addPoints($score10, 5);
  2. $score ← 15

    1<?php2function addPoints(int &$score10, int $bonus5): void {3    $score→ 15 = $score + $bonus5;4}
  3. $score ← 15

    6$score = 10; //@score=4, 207addPoints($score→ 15, 5);89echo "score=" . $score15 . "\n";
    outputscore=15
  1. $score ← 4

    6$score→ 4 = 4;7addPoints($score4, 5);
  2. $score ← 9

    1<?php2function addPoints(int &$score4, int $bonus5): void {3    $score→ 9 = $score + $bonus5;4}
  3. $score ← 9

    6$score = 4;7addPoints($score→ 9, 5);89echo "score=" . $score9 . "\n";
    outputscore=9
  1. $score ← 20

    6$score→ 20 = 20;7addPoints($score20, 5);
  2. $score ← 25

    1<?php2function addPoints(int &$score20, int $bonus5): void {3    $score→ 25 = $score + $bonus5;4}
  3. $score ← 25

    6$score = 20;7addPoints($score→ 25, 5);89echo "score=" . $score25 . "\n";
    outputscore=25

Follow the Reference

  1. score starts as 10.
  2. addPoints($score, 5) receives the caller variable by reference.
  3. Inside the function, 5 is added to that same variable.
  4. The caller's score becomes 15.
  5. The script prints score=15. | starting score | points added | printed score | | --- | --- | --- | | 10 | 5 | 15 | | 4 | 5 | 9 | | 20 | 5 | 25 |

Exercise: reference_parameters.php

Reproduce score=15, then use the pinned score variants 4 and 20 to predict score=9 and score=25.