PhpGenerator a výstup podle PSR
Potřebujete vygenerovat krásně formátovaný PHP kód? Nejlepší cesta je sáhnout po knihovně Nette PhpGenerator, která disponuje opravdu srozumitelným API.
Příklad:
$class = (new Nette\PhpGenerator\ClassType('Demo'))
->setFinal()
->setExtends('ParentClass');
$class->addProperty('id', 1)
->setVisibility('private')
->addComment('@var int');
$class->addMethod('getId')
->addComment('Returns identifier.')
->setReturnType('int')
->setBody('return $this->id;');
echo $class;
Výstup dodržuje coding standard používaný v Nette, který je identický s PSR-12 jen s tím rozdílem, že pro odsazování používá tabulátory místo mezer a metody odděluje dvěma prázdnými řádky pro lepší čitelnost:
final class Demo extends ParentClass
{
→ /** @var int */
→ private $id = 1;
→ /**
→ * Returns identifier.
→ */
→ public function getId(): int
→ {
→ → return $this->id;
→ }
}
PhpGenerátor nicméně umí generovat kód zcela odpovídající PSR-12. Jak na to?
Samotné volání echo $class
je vlastně zkratkou, která
o vykreslení požádá vykreslovač Nette\PhpGenerator\Printer
a
jeho metodou printClass($class)
. A výstup z tohoto vykreslovače
odpovídá Nette standardu. Bude tedy stačit použít jiný vykreslevač,
konkrétně PsrPrinter
:
$printer = new Nette\PhpGenerator\PsrPrinter;
echo $printer->printClass($class);
Vypíše:
final class Demo extends ParentClass
{
/** @var int */
private $id = 1;
/**
* Returns identifier.
*/
public function getId(): int
{
return $this->id;
}
}
Pomocí vykreslovače můžete generovat kód nejen tříd, ale i funkcí
(printFunction()
, printClosure()
a
printArrowFunction()
), metod (printMethod()
),
jmenných prostorů (printNamespace()
) a PHP souborů
(printFile()
).
Chcete-li odeslat komentář, přihlaste se