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: |