ReflectionClass::getAttributes

(PHP 8)

ReflectionClass::getAttributesRecupera los atributos de una clase

Descripción

public ReflectionClass::getAttributes(?string $name = null, int $flags = 0): array

Devuelve todos los atributos declarados en esta clase en forma de un array de objetos ReflectionAttribute.

Parámetros

name

Filter the results to include only ReflectionAttribute instances for attributes matching this class name.

flags

Flags for determining how to filter the results, if name is provided.

Default is 0 which will only return results for attributes that are of the class name.

The only other option available, is to use ReflectionAttribute::IS_INSTANCEOF, which will instead use instanceof for filtering.

Valores devueltos

Un array de atributos, en forma de objetos de tipo ReflectionAttribute.

Ejemplos

Ejemplo #1 Uso básico de ReflectionClass::getAttributes()

<?php
#[Attribute]
class
Fruit {
}

#[
Attribute]
class
Rouge {
}

#[
Fruit]
#[
Rouge]
class
Pomme {
}

$class = new ReflectionClass('Pomme');
$attributes = $class->getAttributes();
print_r(array_map(fn($attribute) => $attribute->getName(), $attributes));
?>

El resultado del ejemplo sería:

Array
(
    [0] => Fruit
    [1] => Rouge
)

Ejemplo #2 Filtrar los resultados por un nombre de clase

<?php
#[Attribute]
class
Fruit {
}

#[
Attribute]
class
Rouge {
}

#[
Fruit]
#[
Rouge]
class
Pomme {
}

$class = new ReflectionClass('Pomme');
$attributes = $class->getAttributes('Fruit');
print_r(array_map(fn($attribute) => $attribute->getName(), $attributes));
?>

El resultado del ejemplo sería:

Array
(
    [0] => Fruit
)

Ejemplo #3 Filtrar los resultados por nombre de clase, con herencia

<?php
interface Couleur {
}

#[
Attribute]
class
Fruit {
}

#[
Attribute]
class
Rouge implements Couleur {
}

#[
Fruit]
#[
Rouge]
class
Pomme {
}

$class = new ReflectionClass('Pomme');
$attributes = $class->getAttributes(Couleur::class, ReflectionAttribute::IS_INSTANCEOF);
print_r(array_map(fn($attribute) => $attribute->getName(), $attributes));
?>

El resultado del ejemplo sería:

Array
(
    [0] => Rouge
)

Ver también

add a note

User Contributed Notes 2 notes

up
2
sandrenyl at gmail dot com
3 years ago
When using the method getAttributes() to fetch attributes based on a parent class, the proper flag constant is ReflectionAttribute::IS_INSTANCEOF (which equals 2 as mentionned by sergiolibe).

<?php
$reflectionClass
->getAttributes(SomeParentAttribute::class, ReflectionAttribute::IS_INSTANCEOF);
?>
up
1
sergiolibe at gmail dot com
3 years ago
When using getAttributes() with specific attribute class and flags, flag 0 will return just matching attributes with specified class, and 2 will return matching attributes with specified class and children of that class:
<?php
#[Attribute(\Attribute::TARGET_CLASS)]
class
SomeAttribute {}

#[
Attribute(\Attribute::TARGET_CLASS)]
class
ChildAttribute extends SomeAttribute {}

#[
SomeAttribute]
#[
SomeChildAttribute]
class
SomeClass {}

$rc = new ReflectionClass(SomeClass::class);

$r_atts = $rc->getAttributes(SomeAttribute::class, 0); // 0 is default, just given class
echo json_encode(array_map(fn(ReflectionAttribute $r_att) => $r_att->getName(), $r_atts)), PHP_EOL;

$r_atts = $rc->getAttributes(SomeAttribute::class, 2); // given class and children classes
echo json_encode(array_map(fn(ReflectionAttribute $r_att) => $r_att->getName(), $r_atts)), PHP_EOL;
?>

output:
["SomeAttribute"]
["SomeAttribute","ChildAttribute"]
To Top