- Added some more method to filter properties
This commit is contained in:
parent
2a6ec3cd1b
commit
0cdc2dc3d8
|
@ -56,4 +56,31 @@ abstract class Reflected
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getAttributes(?string $attributeType = null): array
|
||||||
|
{
|
||||||
|
if ($attributeType) {
|
||||||
|
$list = [];
|
||||||
|
|
||||||
|
foreach($this->attributes as $attribute) {
|
||||||
|
if ($attribute->object instanceof $attributeType) {
|
||||||
|
$list[] = $attribute;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $list;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->attributes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAttribute(string $attributeType): ?object
|
||||||
|
{
|
||||||
|
foreach($this->getAttributes($attributeType) as $attribute) {
|
||||||
|
if ($attribute->object instanceof $attributeType) {
|
||||||
|
return $attribute;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -14,6 +14,11 @@ class ReflectedClass implements ReflectedInterface
|
||||||
public array $traits = [],
|
public array $traits = [],
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
|
public function getClassName() : string
|
||||||
|
{
|
||||||
|
return end(explode('\\', $this->name));
|
||||||
|
}
|
||||||
|
|
||||||
public function getProperties(bool $deep = true) : array
|
public function getProperties(bool $deep = true) : array
|
||||||
{
|
{
|
||||||
return $deep ? array_replace(
|
return $deep ? array_replace(
|
||||||
|
@ -35,14 +40,28 @@ class ReflectedClass implements ReflectedInterface
|
||||||
) : $this->methods;
|
) : $this->methods;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getAttributes(bool $deep = true) : array
|
public function getAttributes(bool $deep = true, ?string $attributeType = null) : array
|
||||||
{
|
{
|
||||||
return $deep ? array_merge(
|
$attributes = $deep ? array_merge(
|
||||||
$this->parent ? $this->parent->getAttributes(true) : [],
|
$this->parent ? $this->parent->getAttributes(true) : [],
|
||||||
array_merge(...array_map(fn($e) => $e->getAttributes(true), $this->interfaces)),
|
array_merge(...array_map(fn($e) => $e->getAttributes(true), $this->interfaces)),
|
||||||
array_merge(...array_map(fn($e) => $e->getAttributes(true), $this->traits)),
|
array_merge(...array_map(fn($e) => $e->getAttributes(true), $this->traits)),
|
||||||
$this->attributes
|
$this->attributes
|
||||||
) : $this->attributes;
|
) : $this->attributes;
|
||||||
|
|
||||||
|
if ($attributeType) {
|
||||||
|
$list = [];
|
||||||
|
|
||||||
|
foreach($attributes as $attribute) {
|
||||||
|
if ($attribute->object instanceof $attributeType) {
|
||||||
|
$list[] = $attribute;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $list;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $attributes;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Get Attributes based on Native attributes's target
|
# Get Attributes based on Native attributes's target
|
||||||
|
@ -146,4 +165,15 @@ class ReflectedClass implements ReflectedInterface
|
||||||
|
|
||||||
return $list;
|
return $list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getAttribute(string $attributeType): ?object
|
||||||
|
{
|
||||||
|
foreach($this->getAttributes($attributeType) as $attribute) {
|
||||||
|
if ($attribute->object instanceof $attributeType) {
|
||||||
|
return $attribute;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -15,8 +15,4 @@ class ReflectedMethod extends Reflected implements ReflectedInterface
|
||||||
public array $parameters = [],
|
public array $parameters = [],
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
public function getAttributes(): array
|
|
||||||
{
|
|
||||||
return $this->attributes;
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -14,12 +14,6 @@ class ReflectedProperty extends Reflected implements ReflectedInterface, \ArrayA
|
||||||
public array $attributes = [],
|
public array $attributes = [],
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
public function getAttributes(): array
|
|
||||||
{
|
|
||||||
return $this->attributes;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
## BACKWARD COMPATIBILITY ONLY To be removed really soon !
|
## BACKWARD COMPATIBILITY ONLY To be removed really soon !
|
||||||
public function offsetExists(mixed $offset): bool
|
public function offsetExists(mixed $offset): bool
|
||||||
{
|
{
|
||||||
|
|
|
@ -31,7 +31,7 @@ class ObjectReflection {
|
||||||
|
|
||||||
public static function fromClass(ReflectionClass|string $class, ? CacheInterface $cache = null) : self
|
public static function fromClass(ReflectionClass|string $class, ? CacheInterface $cache = null) : self
|
||||||
{
|
{
|
||||||
return new static($class, null, $cache);
|
return new static($class, $cache);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function reflectClass() : ReflectedClass
|
public function reflectClass() : ReflectedClass
|
||||||
|
|
Loading…
Reference in New Issue