PHP: Hypertext Preprocessor (original) (raw)
ReflectionClass::getAttributes
(PHP 8)
ReflectionClass::getAttributes — Gets Attributes
Parameters
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](class.reflectionattribute.php#reflectionattribute.constants.is-instanceof)
, which will instead use instanceof
for filtering.
Examples
Example #1 Basic usage
`<?php
#[Attribute]
class Fruit {
}
#[
Attribute]
class Red {
}
#[
Fruit]
#[Red]
class Apple {
}$class = new ReflectionClass('Apple'); attributes=attributes = attributes=class->getAttributes();
print_r(array_map(fn($attribute) => attribute−>getName(),attribute->getName(), attribute−>getName(),attributes));
?>`
The above example will output:
Array ( [0] => Fruit [1] => Red )
Example #2 Filtering results by class name
`<?php
#[Attribute]
class Fruit {
}
#[
Attribute]
class Red {
}
#[
Fruit]
#[Red]
class Apple {
}$class = new ReflectionClass('Apple'); attributes=attributes = attributes=class->getAttributes('Fruit');
print_r(array_map(fn($attribute) => attribute−>getName(),attribute->getName(), attribute−>getName(),attributes));
?>`
The above example will output:
Example #3 Filtering results by class name, with inheritance
`<?php
interface Color {
}
#[
Attribute]
class Fruit {
}
#[
Attribute]
class Red implements Color {
}
#[
Fruit]
#[Red]
class Apple {
}$class = new ReflectionClass('Apple'); attributes=attributes = attributes=class->getAttributes(Color::class, ReflectionAttribute::IS_INSTANCEOF);
print_r(array_map(fn($attribute) => attribute−>getName(),attribute->getName(), attribute−>getName(),attributes));
?>`
The above example will output:
See Also
- ReflectionClassConstant::getAttributes() - Gets Attributes
- ReflectionFunctionAbstract::getAttributes() - Gets Attributes
- ReflectionParameter::getAttributes() - Gets Attributes
- ReflectionProperty::getAttributes() - Gets Attributes
Found A Problem?
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).
getAttributes(SomeParentAttribute::class, ReflectionAttribute::IS_INSTANCEOF); ?>`
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 ratt)=>r_att) => ratt)=>r_att->getName(), ratts)),PHPEOL;r_atts)), PHP_EOL;ratts)),PHPEOL;r_atts = $rc->getAttributes(SomeAttribute::class, 2); // given class and children classes
echo json_encode(array_map(fn(ReflectionAttribute ratt)=>r_att) => ratt)=>r_att->getName(), $r_atts)), PHP_EOL;
?>
output:
["SomeAttribute"]
["SomeAttribute","ChildAttribute"]`