1: <?php declare(strict_types=1);
2:
3: namespace PhpParser\Builder;
4:
5: use PhpParser;
6: use PhpParser\BuilderHelpers;
7: use PhpParser\Node;
8: use PhpParser\Node\Stmt;
9:
10: class Function_ extends FunctionLike {
11: protected string $name;
12: /** @var list<Stmt> */
13: protected array $stmts = [];
14:
15: /** @var list<Node\AttributeGroup> */
16: protected array $attributeGroups = [];
17:
18: /**
19: * Creates a function builder.
20: *
21: * @param string $name Name of the function
22: */
23: public function __construct(string $name) {
24: $this->name = $name;
25: }
26:
27: /**
28: * Adds a statement.
29: *
30: * @param Node|PhpParser\Builder $stmt The statement to add
31: *
32: * @return $this The builder instance (for fluid interface)
33: */
34: public function addStmt($stmt) {
35: $this->stmts[] = BuilderHelpers::normalizeStmt($stmt);
36:
37: return $this;
38: }
39:
40: /**
41: * Adds an attribute group.
42: *
43: * @param Node\Attribute|Node\AttributeGroup $attribute
44: *
45: * @return $this The builder instance (for fluid interface)
46: */
47: public function addAttribute($attribute) {
48: $this->attributeGroups[] = BuilderHelpers::normalizeAttribute($attribute);
49:
50: return $this;
51: }
52:
53: /**
54: * Returns the built function node.
55: *
56: * @return Stmt\Function_ The built function node
57: */
58: public function getNode(): Node {
59: return new Stmt\Function_($this->name, [
60: 'byRef' => $this->returnByRef,
61: 'params' => $this->params,
62: 'returnType' => $this->returnType,
63: 'stmts' => $this->stmts,
64: 'attrGroups' => $this->attributeGroups,
65: ], $this->attributes);
66: }
67: }
68: