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