1: <?php declare(strict_types=1);
2:
3: namespace PhpParser\Builder;
4:
5: use PhpParser\BuilderHelpers;
6: use PhpParser\Node;
7:
8: abstract class FunctionLike extends Declaration {
9: protected bool $returnByRef = false;
10: /** @var Node\Param[] */
11: protected array $params = [];
12:
13: /** @var Node\Identifier|Node\Name|Node\ComplexType|null */
14: protected ?Node $returnType = null;
15:
16: /**
17: * Make the function return by reference.
18: *
19: * @return $this The builder instance (for fluid interface)
20: */
21: public function makeReturnByRef() {
22: $this->returnByRef = true;
23:
24: return $this;
25: }
26:
27: /**
28: * Adds a parameter.
29: *
30: * @param Node\Param|Param $param The parameter to add
31: *
32: * @return $this The builder instance (for fluid interface)
33: */
34: public function addParam($param) {
35: $param = BuilderHelpers::normalizeNode($param);
36:
37: if (!$param instanceof Node\Param) {
38: throw new \LogicException(sprintf('Expected parameter node, got "%s"', $param->getType()));
39: }
40:
41: $this->params[] = $param;
42:
43: return $this;
44: }
45:
46: /**
47: * Adds multiple parameters.
48: *
49: * @param (Node\Param|Param)[] $params The parameters to add
50: *
51: * @return $this The builder instance (for fluid interface)
52: */
53: public function addParams(array $params) {
54: foreach ($params as $param) {
55: $this->addParam($param);
56: }
57:
58: return $this;
59: }
60:
61: /**
62: * Sets the return type for PHP 7.
63: *
64: * @param string|Node\Name|Node\Identifier|Node\ComplexType $type
65: *
66: * @return $this The builder instance (for fluid interface)
67: */
68: public function setReturnType($type) {
69: $this->returnType = BuilderHelpers::normalizeType($type);
70:
71: return $this;
72: }
73: }
74: