Pracujemy na TemplateEngine utworzonym w poprzedniej lekcji. Dodamy do niego własną dyrektywę foreach, jak w Laravelu. Do dzieła.

Najpierw – aktualizacja templatepatterns.php:

<?php 
return [
    //(...)
    [
        "pattern" => '/@foreach\((.*)\)/',
        "replace" => "<?php foreach($1) : ?>" 
    ],
    [
        "pattern" => '/@endforeach/s',
        "replace" => "<?php endforeach; ?>" 
    ],
];

Teraz – sth4.php:

<h1>{{ $site_name }}</h1>

<ul>
@foreach($people as $person)
    <li>{{$person->name}}</li>
@endforeach
</ul>

Sprawdzamy, jak to działa:

<?php 

class TemplateEngine
{
  //(...)
}

$template = new TemplateEngine(__DIR__, 'templatepatterns.php');
$template->addGlobal('site_name', 'MyApp');
$people = [
    (object)['name' => 'John'],
    (object)['name' => 'Jane']
];
echo $template->renderTemplate('sth4.php', ['people' => $people]);

Swoją drogą mamy tutaj kreację anonimowych obiektów bez klasy i konstruktora – rzutowaniem tablicy do object.

Ciekawostka, a zarazem konieczność, jeżeli chcemy się do name odnosić po strzałce, a tak mamy napisany sth4.php, plik templatkowy.