PhpGenerator and PSR output
Do you need to generate beautifully formatted PHP code? The best way is to use the Nette PhpGenerator library, which has a truly understandable API.
Example:
$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;
The output follows the coding standard used in Nette, which is identical to PSR-12 except that it uses tabs instead of spaces for indentation and separates the methods with two blank lines for better readability:
final class Demo extends ParentClass
{
→ /** @var int */
→ private $id = 1;
→ /**
→ * Returns identifier.
→ */
→ public function getId(): int
→ {
→ → return $this->id;
→ }
}
PhpGenerator, however, can generate code completely compliant with PSR-12. How to do it?
The expression echo $class
is actually an abbreviation that asks
the printer Nette\PhpGenerator\Printer
and its method
printClass($class)
to generate code. And the output from this
printer conforms to the Nette standard. So it will be enough to use another
renderer, specifically PsrPrinter
:
$printer = new Nette\PhpGenerator\PsrPrinter;
echo $printer->printClass($class);
Result:
final class Demo extends ParentClass
{
/** @var int */
private $id = 1;
/**
* Returns identifier.
*/
public function getId(): int
{
return $this->id;
}
}
Using the printer, you can generate code not only for classes, but also for
functions (printFunction()
, printClosure()
and
printArrowFunction()
), methods (printMethod()
),
namespaces (printNamespace()
), and PHP files
(printFile()
).
Sign in to submit a comment