Functions and Scope
Reference Parameters
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
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";
$score ← 10
6$score→ 10 = 10; //@score=4, 207addPoints($score10, 5);$score ← 15
1<?php2function addPoints(int &$score10, int $bonus5): void {3 $score→ 15 = $score + $bonus5;4}$score ← 15
6$score = 10; //@score=4, 207addPoints($score→ 15, 5);89echo "score=" . $score15 . "\n";outputscore=15
$score ← 4
6$score→ 4 = 4;7addPoints($score4, 5);$score ← 9
1<?php2function addPoints(int &$score4, int $bonus5): void {3 $score→ 9 = $score + $bonus5;4}$score ← 9
6$score = 4;7addPoints($score→ 9, 5);89echo "score=" . $score9 . "\n";outputscore=9
$score ← 20
6$score→ 20 = 20;7addPoints($score20, 5);$score ← 25
1<?php2function addPoints(int &$score20, int $bonus5): void {3 $score→ 25 = $score + $bonus5;4}$score ← 25
6$score = 20;7addPoints($score→ 25, 5);89echo "score=" . $score25 . "\n";outputscore=25
Follow the Reference
scorestarts as10.addPoints($score, 5)receives the caller variable by reference.- Inside the function,
5is added to that same variable. - The caller's
scorebecomes15. - 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.