Skip to main content

Advanced Control Flow

When​

The when method easily allow for conditional branching within a Stencil definition

$myCondition = false;

Stencil::make()
->when($myCondition, fn(Stencil $stencil) => $stencil->line('My Condition passed'));

The first argument is your condition, and the second is what you would like to do in that condition

Foreach​

The foreach method allows for running code for each item in an array The following will generate a variable and getter function for every item passed to the foreach function.

Stencil::make()
->foreach(['item1', 'item2', 'item3'], function(Stencil $s, string $item) {
$s->line("$$item = null;")
->curlyStatement("public function $item", fn(Stencil $s) => $s->line("return $this->$item"))
})

Call​

The call method allows you to call any other method or closure, passing in the current code stencil.

Stencil::make()
->curlyStatement('class MyClass', fn(Stencil $stencil) => $stencil
->call(function(Stencil $s) {
// Do some complex logic and add stuff to the stencil
$s->line('const ID = "my-class-id";');
})
->call(...MyCodeGenerator::createClassVars()) // Using first class callables in php 8.1+
->call(...MyCodeGenerator::createClassMethods())
->call(...MyCodeGenerator::createToStringMethod())

)

Merge​

The merge allows for the combining of many Stencils

When merging, all the defined variables, functions, and uses will also be merged.

$a = Stencil::make()
->line('From Stencil A')
->use(StencilADependency::class)

$b = Stencil::make()
->line('From Stencil B')
->use(StencilBDependency::class)

$a->merge($b)->save('combined.txt')
// --- results in --- //
"use StencilADependency;
use StencilBDependency;

From Stencil A
From Stencil B
"

Macro​

The Macro method allows you to add custom functions to the CodeStencil class. You can read more about macros here