Fetch properties from functions:
----------------------------------------
Function definition with attributes:
----------------------------------------
#[ReadOnly]
#[Property(type: 'function', name: 'Hello')]
function Hello()
{
return "Hello";
}
-----------------------------------------
Gather attributes from the function
-----------------------------------------
function getAttributes(Reflector $reflection)
{
$attributes = $reflection->getAttributes();
$result = [];
foreach ($attributes as $attribute)
{
$result[$attribute->getName()] = $attribute->getArguments();
}
return $result;
}
$reflection = new ReflectionFunction("Hello");
print_r(getAttributes($reflection));
-----------------------------
OUTPUT
-----------------------------
Array
(
[ReadOnly] => Array
(
)
[Property] => Array
(
[type] => function
[name] => Hello
)
)Читање атрибути со Reflection API
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Читање атрибути со Reflection API
Референца за `language.attributes.reflection.php` со подобрена типографија и навигација.
Читање атрибути со Reflection API
За пристап до атрибути од класи, методи, функции, параметри, својства и константи на класа, користете го getAttributes() За пристап до атрибути од класи, методи, функции, параметри, својства и константи на класата, користете го методот обезбеден од Reflection API. Овој метод враќа низа од инстанци. Овие инстанци може да се прашуваат за името на атрибутот, аргументите и може да се користат за инстанцирање на инстанца на претставениот атрибут. ReflectionAttribute Одвојувањето на рефлектираната репрезентација на атрибутот од неговата вистинска инстанца обезбедува поголема контрола врз ракувањето со грешки, како што се класи на атрибути што недостасуваат, погрешно напишани аргументи или вредности што недостасуваат. Објектите од класата на атрибутот се инстанцираат само по повикувањето на
ReflectionAttribute::newInstance() , осигурувајќи дека валидацијата на аргументите се случува во тој момент.Пример #1 Читање атрибути користејќи Reflection API
Наместо да итерирате преку сите атрибути на рефлектираната инстанца, можете да ги добиете само оние од специфична класа на атрибут со поминување на името на класата на атрибутот како аргумент.
<?php
#[Attribute]
class MyAttribute
{
public $value;
public function __construct($value)
{
$this->value = $value;
}
}
#[MyAttribute(value: 1234)]
class Thing
{
}
function dumpAttributeData($reflection) {
$attributes = $reflection->getAttributes();
foreach ($attributes as $attribute) {
var_dump($attribute->getName());
var_dump($attribute->getArguments());
var_dump($attribute->newInstance());
}
}
dumpAttributeData(new ReflectionClass(Thing::class));
/*
string(11) "MyAttribute"
array(1) {
["value"]=>
int(1234)
}
object(MyAttribute)#3 (1) {
["value"]=>
int(1234)
}
*/Пример #2 Читање специфични атрибути користејќи Reflection API
Hirusha Sharma
<?php
function dumpMyAttributeData($reflection) {
$attributes = $reflection->getAttributes(MyAttribute::class);
foreach ($attributes as $attribute) {
var_dump($attribute->getName());
var_dump($attribute->getArguments());
var_dump($attribute->newInstance());
}
}
dumpMyAttributeData(new ReflectionClass(Thing::class));