"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Attributs PHP : comment utiliser les attributs PHP et créer des classes d'attributs personnalisées – Astuces rapides

Attributs PHP : comment utiliser les attributs PHP et créer des classes d'attributs personnalisées – Astuces rapides

Publié le 2024-11-03
Parcourir:540

Les attributs PHP ont été introduits dans PHP 8.0. Cette version a marqué une étape importante pour le langage, apportant plusieurs nouvelles fonctionnalités et améliorations, notamment l'introduction d'attributs permettant d'ajouter des métadonnées aux déclarations de code.

La première fois que j'ai dû gérer des attributs, c'était à cause d'un problème dans la bibliothèque PHP de l'Inspector. Vérifiez sur GitHub. Avant d'approfondir la solution, examinons ce que sont les attributs et comment ils peuvent être utilisés dans votre code PHP.

Les attributs sont une fonctionnalité puissante qui vous permet d'ajouter des métadonnées à des déclarations telles que des classes, des méthodes ou des propriétés. Ces métadonnées peuvent être récupérées par programme, ouvrant ainsi de nouvelles possibilités pour un code plus propre, plus organisé et plus efficace.

N'oubliez pas que les attributs n'ont aucun effet au moment de l'exécution. Ils seront disponibles dans les API Reflection pour informer votre application des éléments que vous souhaitez exécuter en fonction des attributs attachés à une classe, une méthode ou une propriété.

Attributs intégrés

PHP est livré avec plusieurs attributs intégrés qui servent à différents objectifs. En voici quelques-uns notables :

@obsolète

Marque une fonction ou une méthode comme obsolète, signalant qu'elle doit être évitée car elle pourrait être supprimée dans les versions futures.

#[Deprecated("Use newFunction() instead")]
function oldFunction() 
{
    // Function implementation
}

@outrepasser

Garantit que la méthode d'une classe enfant est destinée à remplacer une méthode de la classe parent.

class Child extends Parent {
    #[Override]
    public function defaultMethod() 
    {
        // Method implementation
    }
}

Si defaultMethod() finit par changer de nom dans la classe parent, il ne s'agit plus d'un remplacement. Dans ce cas, PHP émettra un avertissement car nous avons explicitement déclaré que nous nous attendons à un remplacement et nous alerterons du désalignement.

Quoi qu'il en soit, un bon IDE devrait nous permettre de ne pas commettre ce genre d'erreurs.

@SuppressWarnings

Supprime les avertissements spécifiques pour un morceau de code particulier.

#[SuppressWarnings("SomeWarning")]
function someFunction() 
{
    // Function implementation
}

Création de classes d'attributs personnalisées

Maintenant, créons une classe d'attributs personnalisée. Ceci est utile lorsque vous souhaitez encapsuler un comportement spécifique dans un attribut.

#[Attribute]
class CustomAttribute 
{
    public string $message;

    public function __construct(string $message) 
    {
        $this->message = $message;
    }
}

Vous pouvez ensuite utiliser cet attribut personnalisé sur différents éléments :

class MyClass 
{
    #[CustomAttribute("This is a custom attribute")]
    public $myProperty;

    #[CustomAttribute("Another custom attribute")]
    public function myMethod() 
    {
        // Method implementation
    }
}

Exemples d'utilisation

Explorons un exemple pratique. Supposons que vous construisiez une application Web et que vous souhaitiez créer un attribut personnalisé pour définir la longueur d'une chaîne :

#[Attribute(Attribute::TARGET_PROPERTY)]
class MaxLength 
{
    public int $maxLength;

    public function __construct(int $maxLength) 
    {
        $this->maxLength = $maxLength;
    }
}

Dans l'exemple ci-dessus, nous avons limité la possibilité d'appliquer l'attribut uniquement aux propriétés de classe. Nous pouvons maintenant l'utiliser dans la classe User :

class User 
{
    #[MaxLength(20, message: "Username must be 20 characters or less")]
    public string $username;

    // Other properties and methods
}

Comme mentionné avant, l'ajout de l'attribut à la propriété n'a aucun impact lors de l'exécution. Mais nous pouvons désormais récupérer ces informations en utilisant la réflexion pour éventuellement prendre des mesures.

Adoption par les frameworks PHP

Les frameworks PHP les plus utilisés comme Symfony et Laravel adoptent déjà des attributs pour remplacer essentiellement les "Annotations". Dans Symfony 5.2 ou supérieur, vous pouvez déclarer un contrôleur et le connecter à une route en utilisant les attributs :

public class Arrayable implements \ArrayAccess
{
    …

    public function offsetExists($offset)
    {
        return isset($this->data[$offset]);
    }

    …
}

Depuis PHP 8, la définition de l'interface ArrayAccess a été modifiée comme suit :

PHP Attributes: how to use PHP Attributes and create custom attribute classes – Fast Tips

Avec l'utilisation d'attributs, ils ont appliqué la déclaration du type de données pour les arguments dans les fonctions de compensation. À l'aide de l'attribut LanguageLevelTypeAware, si l'implémentation ne fournit pas le type de données pour les arguments, elle déclenche un "avertissement de dépréciation".

Mais déclarer le type de données dans les arguments de la fonction rompt la compatibilité avec les anciennes versions de PHP qui ne prennent pas en charge la déclaration du type de données des arguments.

Comme il s'agissait simplement d'un avertissement concernant des modifications futures, nous avons résolu le problème avec un autre attribut PHP intégré pour supprimer l'avertissement :

public class Arrayable implements \ArrayAccess
{
    …

    #[\ReturnTypeWillChange]
    public function offsetExists($offset)
    {
        return isset($this->data[$offset]);
    }

    …
}

L'attribut ReturnTypeWillChange indique simplement à PHP que nous sommes informés des futurs changements dans le langage et que nous avons déjà planifié les mises à jour nécessaires.

Pour ce changement en particulier, ils seront définitivement implémentés dans PHP 9.

N'oubliez pas d'utiliser les attributs judicieusement, en gardant votre base de code propre et bien documentée. Ceci est particulièrement crucial dans le développement de produits SaaS où l'évolutivité, la maintenabilité et l'efficacité sont primordiales.

Nouveau comme inspecteur ? Surveillez votre candidature gratuitement

Inspector est un outil de surveillance de l'exécution de code spécialement conçu pour les développeurs de logiciels. Vous n'avez pas besoin d'installer quoi que ce soit au niveau du serveur, installez simplement le package composer et vous êtes prêt à partir.

Contrairement à d'autres plates-formes complexes tout-en-un, Inspector est extrêmement simple et compatible avec PHP. Vous pouvez essayer notre package Laravel ou Symfony.

Si vous recherchez une automatisation efficace, des informations approfondies et la possibilité de transférer des alertes et des notifications dans votre environnement de messagerie, essayez Inspector gratuitement. Enregistrez votre compte.

Ou apprenez-en plus sur le site : https://inspector.dev

PHP Attributes: how to use PHP Attributes and create custom attribute classes – Fast Tips

Déclaration de sortie Cet article est reproduit à l'adresse : https://dev.to/inspector/php-attributes-how-to-use-php-attributes-and-create-custom-attribute-classes-fast-tips-7nf?1S'il y en a infraction, veuillez contacter [email protected] pour supprimer
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3