1<?php declare(strict_types=1);
2
3namespace PhpParser\Node\Stmt;
4
5use PhpParser\Node;
6
7class Interface_ extends ClassLike {
8    /** @var Node\Name[] Extended interfaces */
9    public array $extends;
10
11    /**
12     * Constructs a class node.
13     *
14     * @param string|Node\Identifier $name Name
15     * @param array{
16     *     extends?: Node\Name[],
17     *     stmts?: Node\Stmt[],
18     *     attrGroups?: Node\AttributeGroup[],
19     * } $subNodes Array of the following optional subnodes:
20     *             'extends'    => array(): Name of extended interfaces
21     *             'stmts'      => array(): Statements
22     *             'attrGroups' => array(): PHP attribute groups
23     * @param array<string, mixed> $attributes Additional attributes
24     */
25    public function __construct($name, array $subNodes = [], array $attributes = []) {
26        $this->attributes = $attributes;
27        $this->name = \is_string($name) ? new Node\Identifier($name) : $name;
28        $this->extends = $subNodes['extends'] ?? [];
29        $this->stmts = $subNodes['stmts'] ?? [];
30        $this->attrGroups = $subNodes['attrGroups'] ?? [];
31    }
32
33    public function getSubNodeNames(): array {
34        return ['attrGroups', 'name', 'extends', 'stmts'];
35    }
36
37    public function getType(): string {
38        return 'Stmt_Interface';
39    }
40}
41