Rozbudowa klasy TemplateEngine – dodajemy globalData do naszego template. Do dzieła!

Na początku zmieńmy nasz plik sth.php:

<?php
echo $site_name;
echo "<br>";
echo $name;

Dodajemy tablicę z globalnymi zmiennymi i metodę addGlobal:

class TemplateEngine
{
  private array $globalTemplateData = [];

  //(...)

  public function addGlobal(string $key, mixed $value)
  {
    $this->globalTemplateData[$key] = $value;
  }
}

Modyfikujemy funkcję render, tak aby globalne podlegały ekstrakcji, ale bez kolizji:

class TemplateEngine
{
  //(...)

  public function render(string $template, array $data = [])
  {
    extract($data, EXTR_SKIP);
    extract($this->globalTemplateData, EXTR_SKIP);

    ob_start();

    include $this->resolve($template);

    $output = ob_get_contents();

    ob_end_clean();

    return $output;
  }

  //(...)
}

Teraz możemy użyć naszego template:

$template = new TemplateEngine(__DIR__);
$template->addGlobal('site_name', 'MyApp');
echo $template->render('sth.php', ['name' => 'John']);

Rozbudowa w następnym odcinku.