✏️ 正在编辑: 4_Code_generation.markdown
路径:
/home/bpioifn/www/pigmentse/modules/alma/vendor/nikic/php-parser/doc/4_Code_generation.markdown
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
Code generation =============== It is also possible to generate code using the parser, by first creating an Abstract Syntax Tree and then using the pretty printer to convert it to PHP code. To simplify code generation, the project comes with builders which allow creating node trees using a fluid interface, instead of instantiating all nodes manually. Builders are available for the following syntactic elements: * namespaces and use statements * classes, interfaces and traits * methods, functions and parameters * properties Here is an example: ```php use PhpParser\BuilderFactory; use PhpParser\PrettyPrinter; use PhpParser\Node; $factory = new BuilderFactory; $node = $factory->namespace('Name\Space') ->addStmt($factory->use('Some\Other\Thingy')->as('SomeOtherClass')) ->addStmt($factory->class('SomeClass') ->extend('SomeOtherClass') ->implement('A\Few', '\Interfaces') ->makeAbstract() // ->makeFinal() ->addStmt($factory->method('someMethod') ->makePublic() ->makeAbstract() // ->makeFinal() ->setReturnType('bool') ->addParam($factory->param('someParam')->setTypeHint('SomeClass')) ->setDocComment('/** * This method does something. * * @param SomeClass And takes a parameter */') ) ->addStmt($factory->method('anotherMethod') ->makeProtected() // ->makePublic() [default], ->makePrivate() ->addParam($factory->param('someParam')->setDefault('test')) // it is possible to add manually created nodes ->addStmt(new Node\Expr\Print_(new Node\Expr\Variable('someParam'))) ) // properties will be correctly reordered above the methods ->addStmt($factory->property('someProperty')->makeProtected()) ->addStmt($factory->property('anotherProperty')->makePrivate()->setDefault(array(1, 2, 3))) ) ->getNode() ; $stmts = array($node); $prettyPrinter = new PrettyPrinter\Standard(); echo $prettyPrinter->prettyPrintFile($stmts); ``` This will produce the following output with the standard pretty printer: ```php <?php namespace Name\Space; use Some\Other\Thingy as SomeClass; abstract class SomeClass extends SomeOtherClass implements A\Few, \Interfaces { protected $someProperty; private $anotherProperty = array(1, 2, 3); /** * This method does something. * * @param SomeClass And takes a parameter */ public abstract function someMethod(SomeClass $someParam) : bool; protected function anotherMethod($someParam = 'test') { print $someParam; } } ```
💾 保存文件
← 返回文件管理器