Skip to content

Commit 80b4ea2

Browse files
committed
new: add new object trait for use name alias
1 parent 891bcb4 commit 80b4ea2

File tree

1 file changed

+80
-0
lines changed

1 file changed

+80
-0
lines changed

src/Obj/Traits/NameAliasTrait.php

+80
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
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+
}

0 commit comments

Comments
 (0)