Läsa attribut med Reflection API: Skillnad mellan sidversioner
Admin (diskussion | bidrag) (Skapade sidan med '= Sidslut = Orginalhemsidan på Engelska : https://www.php.net/manual/en/language.attributes.syntax.php <BR>PHP<BR>Språkreferens <BR>Språkreferens#Attribut Kategori:Php<br> <BR> <hr> Det här är en maskinöversättning av PHP-manualen till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på https://www.linux.se/kontaka-linux-se/ <BR><BR>Tack till [https://datorhjalp.se Datorhjälp] som har sponsrat Linux.se...') |
Admin (diskussion | bidrag) Ingen redigeringssammanfattning |
||
Rad 1: | Rad 1: | ||
=== Läsa attribut med Reflection API === | |||
För att få tillgång till attribut från klasser, metoder, funktioner, parametrar, egenskaper och klasskonstanter, tillhandahåller Reflection API metoden getAttributes() på var och en av de motsvarande Reflection-objekten. Denna metod returnerar en array av ReflectionAttribute-instanser som kan användas för att fråga om attributnamn, argument och för att instansiera en instans av det representerade attributet. | |||
Denna separation mellan reflekterad attributrepresentation och faktisk instans ökar kontrollen för programmeraren att hantera fel angående saknade attributklasser, felstavade eller saknade argument. Först efter att ReflectionAttribute::newInstance() har anropats, instansieras objekt av attributklassen och den korrekta matchningen av argument valideras, inte tidigare. | |||
==== Exempel #1 Läsa attribut med hjälp av Reflection API ==== | |||
<pre> <?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) } */ </pre> | |||
Istället för att iterera över alla attribut på reflection-instansen, kan endast de av en specifik attributklass hämtas genom att skicka det sökta attributklassnamnet som argument. | |||
==== Exempel #2 Läsa specifika attribut med hjälp av Reflection API ==== | |||
<pre> <?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)); ?> </pre> | |||
= Sidslut = | = Sidslut = | ||
Orginalhemsidan på Engelska : https://www.php.net/manual/en/language.attributes. | Orginalhemsidan på Engelska : https://www.php.net/manual/en/language.attributes.reflection.php | ||
<BR>[[PHP]]<BR>[[Språkreferens]] | <BR>[[PHP]]<BR>[[Språkreferens]] | ||
<BR>[[Språkreferens#Attribut]] | <BR>[[Språkreferens#Attribut]] |
Versionen från 24 augusti 2024 kl. 11.23
Läsa attribut med Reflection API
För att få tillgång till attribut från klasser, metoder, funktioner, parametrar, egenskaper och klasskonstanter, tillhandahåller Reflection API metoden getAttributes() på var och en av de motsvarande Reflection-objekten. Denna metod returnerar en array av ReflectionAttribute-instanser som kan användas för att fråga om attributnamn, argument och för att instansiera en instans av det representerade attributet.
Denna separation mellan reflekterad attributrepresentation och faktisk instans ökar kontrollen för programmeraren att hantera fel angående saknade attributklasser, felstavade eller saknade argument. Först efter att ReflectionAttribute::newInstance() har anropats, instansieras objekt av attributklassen och den korrekta matchningen av argument valideras, inte tidigare.
Exempel #1 Läsa attribut med hjälp av 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) } */
Istället för att iterera över alla attribut på reflection-instansen, kan endast de av en specifik attributklass hämtas genom att skicka det sökta attributklassnamnet som argument.
Exempel #2 Läsa specifika attribut med hjälp av Reflection API
<?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)); ?>
Sidslut
Orginalhemsidan på Engelska : https://www.php.net/manual/en/language.attributes.reflection.php
PHP
Språkreferens
Språkreferens#Attribut
Det här är en maskinöversättning av PHP-manualen till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på
https://www.linux.se/kontaka-linux-se/
Tack till Datorhjälp som har sponsrat Linux.se med webserver.