Variables created inside a function stay local to that function call.

local variable A local variable belongs to the function call where it is created.

Local Scope

base
local_scope.php
Replay: real traced execution (multi-file project)
<?php
function addBonus(int $base): int {
    $bonus = 3;
    $inside = $base + $bonus;
    return $inside;
}

$base = 10;
$result = addBonus($base);
$outside = $base;

echo "base=" . $base . "\n";
echo "result=" . $result . "\n";
echo "outside=" . $outside . "\n";
<?php
function addBonus(int $base): int {
    $bonus = 3;
    $inside = $base + $bonus;
    return $inside;
}

$base = 5;
$result = addBonus($base);
$outside = $base;

echo "base=" . $base . "\n";
echo "result=" . $result . "\n";
echo "outside=" . $outside . "\n";
<?php
function addBonus(int $base): int {
    $bonus = 3;
    $inside = $base + $bonus;
    return $inside;
}

$base = 20;
$result = addBonus($base);
$outside = $base;

echo "base=" . $base . "\n";
echo "result=" . $result . "\n";
echo "outside=" . $outside . "\n";
  1. $base ← 10

    8$base→ 10 = 10; //@base=5, 209$result = addBonus($base10);10$outside = $base;
  2. $bonus ← 3, $inside ← 13

    1<?php2function addBonus(int $base10): int {3    $bonus→ 3 = 3;4    $inside→ 13 = $base10 + $bonus3;5    return $inside13;6}
  3. $result ← 13, $outside ← 10

    8$base = 10; //@base=5, 209$result→ 13 = addBonus($base10);10$outside→ 10 = $base10;1112echo "base=" . $base10 . "\n";13echo "result=" . $result13 . "\n";14echo "outside=" . $outside10 . "\n";
    outputbase=10
    result=13
    outside=10
  1. $base ← 5

    8$base→ 5 = 5;9$result = addBonus($base5);10$outside = $base;
  2. $bonus ← 3, $inside ← 8

    1<?php2function addBonus(int $base5): int {3    $bonus→ 3 = 3;4    $inside→ 8 = $base5 + $bonus3;5    return $inside8;6}
  3. $result ← 8, $outside ← 5

    8$base = 5;9$result→ 8 = addBonus($base5);10$outside→ 5 = $base5;1112echo "base=" . $base5 . "\n";13echo "result=" . $result8 . "\n";14echo "outside=" . $outside5 . "\n";
    outputbase=5
    result=8
    outside=5
  1. $base ← 20

    8$base→ 20 = 20;9$result = addBonus($base20);10$outside = $base;
  2. $bonus ← 3, $inside ← 23

    1<?php2function addBonus(int $base20): int {3    $bonus→ 3 = 3;4    $inside→ 23 = $base20 + $bonus3;5    return $inside23;6}
  3. $result ← 23, $outside ← 20

    8$base = 20;9$result→ 23 = addBonus($base20);10$outside→ 20 = $base20;1112echo "base=" . $base20 . "\n";13echo "result=" . $result23 . "\n";14echo "outside=" . $outside20 . "\n";
    outputbase=20
    result=23
    outside=20

Follow the Scope

  1. base starts as 10.
  2. addBonus($base) receives a local copy of 10.
  3. Inside the function, local bonus is 3.
  4. The returned result is 13.
  5. Outside the function, base is still 10, so outside=10. | place | value | | --- | --- | | starting $base | 10 | | local $bonus | 3 | | returned $result | 13 | | outside $base | 10 |

Exercise: local_scope.php

Reproduce base=10, result=13, and outside=10, then use the pinned base variants 5 and 20 to predict result=8 outside=5 and result=23 outside=20.