Läsa attribut med Reflection API: Skillnad mellan sidversioner

Från Wiki.linux.se
Hoppa till navigering Hoppa till sök
(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...')
 
Ingen redigeringssammanfattning
 
(2 mellanliggande sidversioner av samma användare visas inte)
Rad 1: Rad 1:
=== Läsa attribut med Reflection API ===
För att komma åt attribut från klasser, metoder, funktioner, parametrar, egenskaper och klasskonstanter tillhandahåller Reflection API metoden `getAttributes()` på varje motsvarande Reflection-objekt. Denna metod returnerar en array av `ReflectionAttribute`-instanser som kan frågas efter attributnamn, argument och för att skapa en instans av det representerade attributet.
Denna separering av reflekterad attributrepresentation från faktisk instans ökar programmets kontroll över att hantera fel relaterade till saknade attributklasser, felskrivna eller saknade argument. Först efter att ha anropat `ReflectionAttribute::newInstance()` skapas objekt av attributklassen, och korrekt matchning av argument valideras, inte tidigare.
==== Exempel #1 Läsa attribut med 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 viss attributklass hämtas genom att skicka det sökta attributklassnamnet som argument.
==== Exempel #2 Läsa specifika attribut med 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.syntax.php
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]]

Nuvarande version från 24 augusti 2024 kl. 11.24

Läsa attribut med Reflection API

För att komma åt attribut från klasser, metoder, funktioner, parametrar, egenskaper och klasskonstanter tillhandahåller Reflection API metoden `getAttributes()` på varje motsvarande Reflection-objekt. Denna metod returnerar en array av `ReflectionAttribute`-instanser som kan frågas efter attributnamn, argument och för att skapa en instans av det representerade attributet.

Denna separering av reflekterad attributrepresentation från faktisk instans ökar programmets kontroll över att hantera fel relaterade till saknade attributklasser, felskrivna eller saknade argument. Först efter att ha anropat `ReflectionAttribute::newInstance()` skapas objekt av attributklassen, och korrekt matchning av argument valideras, inte tidigare.

Exempel #1 Läsa attribut med 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 viss attributklass hämtas genom att skicka det sökta attributklassnamnet som argument.

Exempel #2 Läsa specifika attribut med 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.