xref: /PHP-Parser/lib/PhpParser/Node/Param.php (revision f4961b89)
1<?php declare(strict_types=1);
2
3namespace PhpParser\Node;
4
5use PhpParser\Modifiers;
6use PhpParser\Node;
7use PhpParser\NodeAbstract;
8
9class Param extends NodeAbstract {
10    /** @var null|Identifier|Name|ComplexType Type declaration */
11    public ?Node $type;
12    /** @var bool Whether parameter is passed by reference */
13    public bool $byRef;
14    /** @var bool Whether this is a variadic argument */
15    public bool $variadic;
16    /** @var Expr\Variable|Expr\Error Parameter variable */
17    public Expr $var;
18    /** @var null|Expr Default value */
19    public ?Expr $default;
20    /** @var int Optional visibility flags */
21    public int $flags;
22    /** @var AttributeGroup[] PHP attribute groups */
23    public array $attrGroups;
24
25    /**
26     * Constructs a parameter node.
27     *
28     * @param Expr\Variable|Expr\Error $var Parameter variable
29     * @param null|Expr $default Default value
30     * @param null|Identifier|Name|ComplexType $type Type declaration
31     * @param bool $byRef Whether is passed by reference
32     * @param bool $variadic Whether this is a variadic argument
33     * @param array<string, mixed> $attributes Additional attributes
34     * @param int $flags Optional visibility flags
35     * @param list<AttributeGroup> $attrGroups PHP attribute groups
36     */
37    public function __construct(
38        Expr $var, ?Expr $default = null, ?Node $type = null,
39        bool $byRef = false, bool $variadic = false,
40        array $attributes = [],
41        int $flags = 0,
42        array $attrGroups = []
43    ) {
44        $this->attributes = $attributes;
45        $this->type = $type;
46        $this->byRef = $byRef;
47        $this->variadic = $variadic;
48        $this->var = $var;
49        $this->default = $default;
50        $this->flags = $flags;
51        $this->attrGroups = $attrGroups;
52    }
53
54    public function getSubNodeNames(): array {
55        return ['attrGroups', 'flags', 'type', 'byRef', 'variadic', 'var', 'default'];
56    }
57
58    public function getType(): string {
59        return 'Param';
60    }
61
62    /**
63     * Whether this parameter uses constructor property promotion.
64     */
65    public function isPromoted(): bool {
66        return $this->flags !== 0;
67    }
68
69    public function isPublic(): bool {
70        return (bool) ($this->flags & Modifiers::PUBLIC);
71    }
72
73    public function isProtected(): bool {
74        return (bool) ($this->flags & Modifiers::PROTECTED);
75    }
76
77    public function isPrivate(): bool {
78        return (bool) ($this->flags & Modifiers::PRIVATE);
79    }
80
81    public function isReadonly(): bool {
82        return (bool) ($this->flags & Modifiers::READONLY);
83    }
84}
85