A tiny config file can centralize values that several scripts share.

scalar configuration Keep trace examples scalar by loading individual config values instead of a larger settings bundle.

Config Files

extra
config_files.php
Replay: real traced execution (multi-file project)
<?php
$extra = 1;
include __DIR__ . "/app_config.inc";
$limit = $baseLimit + $extra;

echo "mode=" . $mode . "\n";
echo "limit=" . $limit . "\n";
<?php
$extra = 0;
include __DIR__ . "/app_config.inc";
$limit = $baseLimit + $extra;

echo "mode=" . $mode . "\n";
echo "limit=" . $limit . "\n";
<?php
$extra = 4;
include __DIR__ . "/app_config.inc";
$limit = $baseLimit + $extra;

echo "mode=" . $mode . "\n";
echo "limit=" . $limit . "\n";
  1. $extra ← 1, $limit ← 1

    1<?php2$extra→ 1 = 1; //@extra=0, 43include __DIR__ . "/app_config.inc";4$limit→ 1 = $baseLimitNULL + $extra1;56echo "mode=" . $modeNULL . "\n";7echo "limit=" . $limit1 . "\n";
    outputmode=
    limit=1
  1. $extra ← 0, $limit ← 0

    1<?php2$extra→ 0 = 0;3include __DIR__ . "/app_config.inc";4$limit→ 0 = $baseLimitNULL + $extra0;56echo "mode=" . $modeNULL . "\n";7echo "limit=" . $limit0 . "\n";
    outputmode=
    limit=0
  1. $extra ← 4, $limit ← 4

    1<?php2$extra→ 4 = 4;3include __DIR__ . "/app_config.inc";4$limit→ 4 = $baseLimitNULL + $extra4;56echo "mode=" . $modeNULL . "\n";7echo "limit=" . $limit4 . "\n";
    outputmode=
    limit=4

Follow the Include

  1. $extra starts at 1.
  2. include loads app_config.inc.
  3. The included file sets $mode to demo and $baseLimit to 3.
  4. $limit becomes $baseLimit + $extra, so 3 + 1 = 4.
  5. The script prints mode=demo and limit=4. | extra | baseLimit from include | mode from include | limit output | | ---: | ---: | --- | --- | | 0 | 3 | demo | limit=3 | | 1 | 3 | demo | limit=4 | | 4 | 3 | demo | limit=7 |

Exercise: config_files.php

Reproduce mode=demo and limit=4, then use extra 0 and 4 to predict limit=3 and limit=7.