1: <?php declare(strict_types=1);
2:
3: namespace PhpParser\Node;
4:
5: use PhpParser\NodeAbstract;
6:
7: /**
8: * Represents a non-namespaced name. Namespaced names are represented using Name nodes.
9: */
10: class Identifier extends NodeAbstract {
11: /**
12: * @psalm-var non-empty-string
13: * @var string Identifier as string
14: */
15: public string $name;
16:
17: /** @var array<string, bool> */
18: private static array $specialClassNames = [
19: 'self' => true,
20: 'parent' => true,
21: 'static' => true,
22: ];
23:
24: /**
25: * Constructs an identifier node.
26: *
27: * @param string $name Identifier as string
28: * @param array<string, mixed> $attributes Additional attributes
29: */
30: public function __construct(string $name, array $attributes = []) {
31: if ($name === '') {
32: throw new \InvalidArgumentException('Identifier name cannot be empty');
33: }
34:
35: $this->attributes = $attributes;
36: $this->name = $name;
37: }
38:
39: public function getSubNodeNames(): array {
40: return ['name'];
41: }
42:
43: /**
44: * Get identifier as string.
45: *
46: * @psalm-return non-empty-string
47: * @return string Identifier as string.
48: */
49: public function toString(): string {
50: return $this->name;
51: }
52:
53: /**
54: * Get lowercased identifier as string.
55: *
56: * @psalm-return non-empty-string
57: * @return string Lowercased identifier as string
58: */
59: public function toLowerString(): string {
60: return strtolower($this->name);
61: }
62:
63: /**
64: * Checks whether the identifier is a special class name (self, parent or static).
65: *
66: * @return bool Whether identifier is a special class name
67: */
68: public function isSpecialClassName(): bool {
69: return isset(self::$specialClassNames[strtolower($this->name)]);
70: }
71:
72: /**
73: * Get identifier as string.
74: *
75: * @psalm-return non-empty-string
76: * @return string Identifier as string
77: */
78: public function __toString(): string {
79: return $this->name;
80: }
81:
82: public function getType(): string {
83: return 'Identifier';
84: }
85: }
86: