Functions and Scope
Value Copies
Normal arguments pass a value copy, so changing the parameter does not change the caller variable.
value copy
A parameter can change inside the function without changing the original variable.
Value Copies
value_copy.php
Replay: real traced execution (multi-file project)
<?php
function addOne(int $value): int {
$value = $value + 1;
return $value;
}
$number = 5;
$changed = addOne($number);
echo "number=" . $number . "\n";
echo "changed=" . $changed . "\n";
<?php
function addOne(int $value): int {
$value = $value + 1;
return $value;
}
$number = 2;
$changed = addOne($number);
echo "number=" . $number . "\n";
echo "changed=" . $changed . "\n";
<?php
function addOne(int $value): int {
$value = $value + 1;
return $value;
}
$number = 9;
$changed = addOne($number);
echo "number=" . $number . "\n";
echo "changed=" . $changed . "\n";
$number ← 5
7$number→ 5 = 5; //@number=2, 98$changed = addOne($number5);$value ← 6
1<?php2function addOne(int $value5): int {3 $value→ 6 = $value + 1;4 return $value6;5}$changed ← 6
7$number = 5; //@number=2, 98$changed→ 6 = addOne($number5);910echo "number=" . $number5 . "\n";11echo "changed=" . $changed6 . "\n";outputnumber=5 changed=6
$number ← 2
7$number→ 2 = 2;8$changed = addOne($number2);$value ← 3
1<?php2function addOne(int $value2): int {3 $value→ 3 = $value + 1;4 return $value3;5}$changed ← 3
7$number = 2;8$changed→ 3 = addOne($number2);910echo "number=" . $number2 . "\n";11echo "changed=" . $changed3 . "\n";outputnumber=2 changed=3
$number ← 9
7$number→ 9 = 9;8$changed = addOne($number9);$value ← 10
1<?php2function addOne(int $value9): int {3 $value→ 10 = $value + 1;4 return $value10;5}$changed ← 10
7$number = 9;8$changed→ 10 = addOne($number9);910echo "number=" . $number9 . "\n";11echo "changed=" . $changed10 . "\n";outputnumber=9 changed=10
Follow the Copy
numberstarts as5.addOne($number)receives a copied value.- Inside the function, the copied value becomes
6. - The returned
changedvalue is6. - The original
numberstill prints as5. | original number | returned changed | | --- | --- | | 5 | 6 | | 2 | 3 | | 9 | 10 |
Exercise: value_copy.php
Reproduce number=5 and changed=6, then use the pinned number variants 2 and 9 to predict number=2 changed=3 and number=9 changed=10.