Deklarera attributklasser: Skillnad mellan sidversioner
Admin (diskussion | bidrag) Ingen redigeringssammanfattning |
Admin (diskussion | bidrag) |
||
(3 mellanliggande sidversioner av samma användare visas inte) | |||
Rad 1: | Rad 1: | ||
=== Deklarera attributklasser === | |||
Även om det inte är strikt nödvändigt rekommenderas det att skapa en faktisk klass för varje attribut. I det enklaste fallet behövs endast en tom klass med attributet `#[Attribute]` deklarerat, som kan importeras från det globala namnutrymmet med en `use`-sats. | |||
==== Exempel #1 Enkel attributklass ==== | |||
<pre> | |||
<?php | |||
namespace Example; | |||
use Attribute; | |||
#[Attribute] | |||
class MyAttribute | |||
{ | |||
} | |||
?> | |||
</pre> | |||
För att begränsa vilken typ av deklaration ett attribut kan tilldelas kan en bitmask skickas som det första argumentet till `#[Attribute]`-deklarationen. | |||
==== Exempel #2 Använda målspecificering för att begränsa var attribut kan användas ==== | |||
<pre> | |||
<?php | |||
namespace Example; | |||
use Attribute; | |||
#[Attribute(Attribute::TARGET_METHOD | Attribute::TARGET_FUNCTION)] | |||
class MyAttribute | |||
{ | |||
} | |||
?> | |||
</pre> | |||
Att deklarera `MyAttribute` på en annan typ kommer nu att kasta ett undantag under anropet till `ReflectionAttribute::newInstance()`. | |||
Följande mål kan specificeras: | |||
* [[Attributklassen#Attribute::TARGET CLASS|Attribute::TARGET_CLASS]] | |||
* [[Attributklassen#Attribute::TARGET FUNCTION|Attribute::TARGET_FUNCTION]] | |||
* [[Attributklassen#Attribute::TARGET METHOD|Attribute::TARGET_METHOD]] | |||
* [[Attributklassen#Attribute::TARGET_PROPERTY|Attribute::Attribute::TARGET_PROPERTY]] | |||
* [[Attributklassen#Attribute::TARGET_CLASS_CONSTANT|Attribute::Attribute::TARGET_CLASS_CONSTANT]] | |||
* [Attributklassen#Attribute::Attribute::TARGET_PARAMETER|Attribute::Attribute::TARGET_PARAMETER]] | |||
* [Attributklassen#Attribute::Attribute::TARGET_ALL|Attribute::Attribute::ALL]] | |||
Som standard kan ett attribut endast användas en gång per deklaration. Om attributet ska kunna användas flera gånger på en deklaration måste det specificeras som en del av bitmasken till `#[Attribute]`-deklarationen. | |||
==== Exempel #3 Använda IS_REPEATABLE för att tillåta attribut på en deklaration flera gånger ==== | |||
<pre> | |||
<?php | |||
namespace Example; | |||
use Attribute; | |||
#[Attribute(Attribute::TARGET_METHOD | Attribute::TARGET_FUNCTION | Attribute::IS_REPEATABLE)] | |||
class MyAttribute | |||
{ | |||
} | |||
?> | |||
</pre> | |||
Nuvarande version från 24 augusti 2024 kl. 11.43
Deklarera attributklasser
Även om det inte är strikt nödvändigt rekommenderas det att skapa en faktisk klass för varje attribut. I det enklaste fallet behövs endast en tom klass med attributet `#[Attribute]` deklarerat, som kan importeras från det globala namnutrymmet med en `use`-sats.
Exempel #1 Enkel attributklass
<?php namespace Example; use Attribute; #[Attribute] class MyAttribute { } ?>
För att begränsa vilken typ av deklaration ett attribut kan tilldelas kan en bitmask skickas som det första argumentet till `#[Attribute]`-deklarationen.
Exempel #2 Använda målspecificering för att begränsa var attribut kan användas
<?php namespace Example; use Attribute; #[Attribute(Attribute::TARGET_METHOD | Attribute::TARGET_FUNCTION)] class MyAttribute { } ?>
Att deklarera `MyAttribute` på en annan typ kommer nu att kasta ett undantag under anropet till `ReflectionAttribute::newInstance()`.
Följande mål kan specificeras:
- Attribute::TARGET_CLASS
- Attribute::TARGET_FUNCTION
- Attribute::TARGET_METHOD
- Attribute::Attribute::TARGET_PROPERTY
- Attribute::Attribute::TARGET_CLASS_CONSTANT
- [Attributklassen#Attribute::Attribute::TARGET_PARAMETER|Attribute::Attribute::TARGET_PARAMETER]]
- [Attributklassen#Attribute::Attribute::TARGET_ALL|Attribute::Attribute::ALL]]
Som standard kan ett attribut endast användas en gång per deklaration. Om attributet ska kunna användas flera gånger på en deklaration måste det specificeras som en del av bitmasken till `#[Attribute]`-deklarationen.
Exempel #3 Använda IS_REPEATABLE för att tillåta attribut på en deklaration flera gånger
<?php namespace Example; use Attribute; #[Attribute(Attribute::TARGET_METHOD | Attribute::TARGET_FUNCTION | Attribute::IS_REPEATABLE)] class MyAttribute { } ?>
Sidslut
Orginalhemsidan på Engelska : https://www.php.net/manual/en/language.attributes.classes.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.