Promotion des propriétés du constructeur est une fonctionnalité introduite dans PHP 8 qui simplifie la déclaration et l'initialisation des propriétés au sein d'une classe. Avant PHP 8, vous deviez déclarer explicitement les propriétés de classe, puis les initialiser dans le constructeur. Avec cette fonctionnalité, vous pouvez déclarer et initialiser des propriétés directement dans la liste des paramètres du constructeur, réduisant ainsi le code passe-partout.
Syntaxe traditionnelle (avant PHP 8)
class Product { private string $name; private float $price; public function __construct(string $name, float $price) { $this->name = $name; $this->price = $price; } }
Syntaxe de promotion de propriété de constructeur (PHP 8)
class Product { public function __construct( private string $name, private float $price ) {} }
Avantages
Réduit le code passe-partout :
Améliore la lisibilité :
Prend en charge l'immuabilité :
Remarques
Modificateurs de visibilité :
Valeurs par défaut :
class Product { public function __construct( private string $name = 'Unnamed', private float $price = 0.0 ) {} }
Mélanger les propriétés promues et non promues :
class Product { private string $category; public function __construct( private string $name, private float $price ) { $this->category = 'General'; } }
Cas d'utilisation
LaPromotion des propriétés du constructeur est particulièrement utile pour les classes simples comme les DTO (Data Transfer Objects), dont l'objectif principal est de stocker des données.
class CustomerDTO { public function __construct( public string $name, public string $email, public ?string $phone = null ) {} }
Conclusion
Constructor Property Promotion est une fonctionnalité puissante de PHP 8 qui améliore la productivité et réduit la complexité du code. Il est idéal pour les classes avec plusieurs propriétés où une initialisation concise et claire est souhaitée.
Dans PHP 8, les attributs (également appelés annotations) peuvent être combinés de manière transparente avec la Promotion des propriétés du constructeur, ce qui donne un code plus propre et plus expressif, en particulier dans les scénarios où les métadonnées doivent être associées à des propriétés.
Intégration avec Promotion Propriété Constructeur
Avec Constructor Property Promotion, les propriétés sont définies directement dans le constructeur. Vous pouvez utiliser des attributs pour décorer ces propriétés et ajouter des informations contextuelles sans avoir besoin de déclarer les propriétés séparément.
Exemple pratique
Supposons que vous travailliez sur un DTO (Data Transfer Object) et que vous souhaitiez mapper les propriétés aux colonnes de la base de données
Sans promotion immobilière constructeur
class Product { private string $name; private float $price; public function __construct(string $name, float $price) { $this->name = $name; $this->price = $price; } }
Avec Promotion Propriété Constructeur
class Product { public function __construct( private string $name, private float $price ) {} }
Avantages de l'intégration
Code passe-partout réduit :
Code plus propre et plus lisible :
Flexibilité avec réflexion :
Accès aux attributs avec réflexion
class Product { public function __construct( private string $name = 'Unnamed', private float $price = 0.0 ) {} }
Explication du Code
Définition de l'attribut de colonne :
Ajout d'attributs aux paramètres du constructeur :
Utiliser la réflexion :
Accès au constructeur :
Itération sur les paramètres :
Récupération des attributs :
Instanciation de l'attribut :
Impression des métadonnées :
Sortie :
class Product { private string $category; public function __construct( private string $name, private float $price ) { $this->category = 'General'; } }
Cas d'utilisation courants
Mappage de base de données :
Validation des données :
Sérialisation/Désérialisation :
Conclusion
L'intégration de Constructor Property Promotion avec Attributs fournit un moyen puissant et concis de structurer les classes en PHP. Ceci est particulièrement utile dans les systèmes qui s'appuient sur des métadonnées, telles que l'ORM, la validation ou la sérialisation, rendant le code plus expressif et organisé.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!