File tree Expand file tree Collapse file tree 1 file changed +80
-0
lines changed Expand file tree Collapse file tree 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