(PHP 8)
ReflectionClassConstant::getAttributes — Verifica los atributos
Verifica todos los atributos declarados en esta constante de clase en forma de un array de objetos ReflectionAttribute.
name
Filtrar los resultados para incluir únicamente las instancias de ReflectionAttribute para los atributos correspondientes a este nombre de clase.
flags
Flags para determinar cómo filtrar los resultados, si name
es proporcionado.
El valor por omisión es 0
que solo retornará los resultados
para los atributos que son de la clase name
.
La única otra opción disponible es utilizar ReflectionAttribute::IS_INSTANCEOF
,
que utilizará instanceof
para el filtrado.
Un array de atributos, en forma de objetos ReflectionAttribute.
Ejemplo #1 Uso simple
<?php
#[Attribute]
class Fruit {
}
#[Attribute]
class Red {
}
class Basket {
#[Fruit]
#[Red]
public const APPLE = 'apple';
}
$classConstant = new ReflectionClassConstant('Basket', 'APPLE');
$attributes = $classConstant->getAttributes();
print_r(array_map(fn($attribute) => $attribute->getName(), $attributes));
?>
El ejemplo anterior mostrará :
Array ( [0] => Fruit [1] => Red )
Ejemplo #2 Resultados filtrados por nombre de clase
<?php
#[Attribute]
class Fruit {
}
#[Attribute]
class Red {
}
class Basket {
#[Fruit]
#[Red]
public const APPLE = 'apple';
}
$classConstant = new ReflectionClassConstant('Basket', 'APPLE');
$attributes = $classConstant->getAttributes('Fruit');
print_r(array_map(fn($attribute) => $attribute->getName(), $attributes));
?>
El ejemplo anterior mostrará :
Array ( [0] => Fruit )
Ejemplo #3 Resultados filtrados por nombre de clase, con herencia
<?php
interface Color {
}
#[Attribute]
class Fruit {
}
#[Attribute]
class Red implements Color {
}
class Basket {
#[Fruit]
#[Red]
public const APPLE = 'apple';
}
$classConstant = new ReflectionClassConstant('Basket', 'APPLE');
$attributes = $classConstant->getAttributes('Color', ReflectionAttribute::IS_INSTANCEOF);
print_r(array_map(fn($attribute) => $attribute->getName(), $attributes));
?>
El ejemplo anterior mostrará :
Array ( [0] => Red )