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

number
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";
  1. $number ← 5

    7$number→ 5 = 5; //@number=2, 98$changed = addOne($number5);
  2. $value ← 6

    1<?php2function addOne(int $value5): int {3    $value→ 6 = $value + 1;4    return $value6;5}
  3. $changed ← 6

    7$number = 5; //@number=2, 98$changed→ 6 = addOne($number5);910echo "number=" . $number5 . "\n";11echo "changed=" . $changed6 . "\n";
    outputnumber=5
    changed=6
  1. $number ← 2

    7$number→ 2 = 2;8$changed = addOne($number2);
  2. $value ← 3

    1<?php2function addOne(int $value2): int {3    $value→ 3 = $value + 1;4    return $value3;5}
  3. $changed ← 3

    7$number = 2;8$changed→ 3 = addOne($number2);910echo "number=" . $number2 . "\n";11echo "changed=" . $changed3 . "\n";
    outputnumber=2
    changed=3
  1. $number ← 9

    7$number→ 9 = 9;8$changed = addOne($number9);
  2. $value ← 10

    1<?php2function addOne(int $value9): int {3    $value→ 10 = $value + 1;4    return $value10;5}
  3. $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

  1. number starts as 5.
  2. addOne($number) receives a copied value.
  3. Inside the function, the copied value becomes 6.
  4. The returned changed value is 6.
  5. The original number still prints as 5. | 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.