File tree 1 file changed +80
-0
lines changed
1 file changed +80
-0
lines changed Original file line number Diff line number Diff line change
1
+ <?php declare (strict_types=1 );
2
+
3
+ namespace Toolkit \Stdlib \Obj \Traits ;
4
+
5
+ use InvalidArgumentException ;
6
+
7
+ /**
8
+ * trait NameAliasTrait
9
+ */
10
+ trait NameAliasTrait
11
+ {
12
+ /**
13
+ * @var array
14
+ */
15
+ private $ aliases = [];
16
+
17
+ /**
18
+ * set name alias(es)
19
+ *
20
+ * @param string $name
21
+ * @param string|array $alias
22
+ * @param bool $validate
23
+ */
24
+ public function setAlias (string $ name , $ alias , bool $ validate = false ): void
25
+ {
26
+ foreach ((array )$ alias as $ aliasName ) {
27
+ if (!isset ($ this ->aliases [$ aliasName ])) {
28
+ $ this ->aliases [$ aliasName ] = $ name ;
29
+ } elseif ($ validate ) {
30
+ $ oldName = $ this ->aliases [$ aliasName ];
31
+ throw new InvalidArgumentException (
32
+ "Alias ' $ aliasName' has been registered by ' $ oldName', cannot assign to the ' $ name' "
33
+ );
34
+ }
35
+ }
36
+ }
37
+
38
+ /**
39
+ * Get real name by alias
40
+ *
41
+ * @param string $alias
42
+ *
43
+ * @return mixed
44
+ */
45
+ public function resolveAlias (string $ alias ): string
46
+ {
47
+ return $ this ->aliases [$ alias ] ?? $ alias ;
48
+ }
49
+
50
+ /**
51
+ * @param string $alias
52
+ *
53
+ * @return bool
54
+ */
55
+ public function hasAlias (string $ alias ): bool
56
+ {
57
+ return isset ($ this ->aliases [$ alias ]);
58
+ }
59
+
60
+ /**
61
+ * @param string $name
62
+ *
63
+ * @return array
64
+ */
65
+ public function getAliases (string $ name = '' ): array
66
+ {
67
+ if ($ name ) {
68
+ $ aliases = [];
69
+ foreach ($ this ->aliases as $ alias => $ n ) {
70
+ if ($ name === $ n ) {
71
+ $ aliases [] = $ alias ;
72
+ }
73
+ }
74
+
75
+ return $ aliases ;
76
+ }
77
+
78
+ return $ this ->aliases ;
79
+ }
80
+ }
You can’t perform that action at this time.
0 commit comments