Functions and Scope
Local Scope
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
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";
$base ← 10
8$base→ 10 = 10; //@base=5, 209$result = addBonus($base10);10$outside = $base;$bonus ← 3, $inside ← 13
1<?php2function addBonus(int $base10): int {3 $bonus→ 3 = 3;4 $inside→ 13 = $base10 + $bonus3;5 return $inside13;6}$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
$base ← 5
8$base→ 5 = 5;9$result = addBonus($base5);10$outside = $base;$bonus ← 3, $inside ← 8
1<?php2function addBonus(int $base5): int {3 $bonus→ 3 = 3;4 $inside→ 8 = $base5 + $bonus3;5 return $inside8;6}$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
$base ← 20
8$base→ 20 = 20;9$result = addBonus($base20);10$outside = $base;$bonus ← 3, $inside ← 23
1<?php2function addBonus(int $base20): int {3 $bonus→ 3 = 3;4 $inside→ 23 = $base20 + $bonus3;5 return $inside23;6}$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
basestarts as10.addBonus($base)receives a local copy of10.- Inside the function, local
bonusis3. - The returned
resultis13. - Outside the function,
baseis still10, sooutside=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.