Home >Backend Development >PHP Tutorial >PHP ews: Constructor Property Promotion
Constructor Property Promotion is a feature introduced in PHP 8 that simplifies property declaration and initialization within a class. Before PHP 8, you had to explicitly declare class properties and then initialize them inside the constructor. With this feature, you can declare and initialize properties directly in the constructor's parameter list, reducing boilerplate code.
Traditional Syntax (Before PHP 8)
class Product { private string $name; private float $price; public function __construct(string $name, float $price) { $this->name = $name; $this->price = $price; } }
Constructor Property Promotion Syntax (PHP 8)
class Product { public function __construct( private string $name, private float $price ) {} }
Benefits
Reduces Boilerplate Code:
Improves Readability:
Supports Immutability:
Notes
Visibility Modifiers:
Default Values:
class Product { public function __construct( private string $name = 'Unnamed', private float $price = 0.0 ) {} }
Mixing Promoted and Non-Promoted Properties:
class Product { private string $category; public function __construct( private string $name, private float $price ) { $this->category = 'General'; } }
Use Cases
Constructor Property Promotion is particularly useful for simple classes like DTOs (Data Transfer Objects), where the primary purpose is to store data.
class CustomerDTO { public function __construct( public string $name, public string $email, public ?string $phone = null ) {} }
Conclusion
Constructor Property Promotion is a powerful feature in PHP 8 that enhances productivity and reduces code complexity. It is ideal for classes with multiple properties where concise and clear initialization is desired.
In PHP 8, Attributes (also known as Annotations) can be seamlessly combined with Constructor Property Promotion, resulting in cleaner and more expressive code, especially in scenarios where metadata needs to be associated with properties.
Integration with Constructor Property Promotion
With Constructor Property Promotion, properties are defined directly in the constructor. You can use Attributes to decorate these properties and add contextual information without needing to declare the properties separately.
Practical Example
Suppose you're working on a DTO (Data Transfer Object) and want to map properties to database columns
Without Constructor Property Promotion
class Product { private string $name; private float $price; public function __construct(string $name, float $price) { $this->name = $name; $this->price = $price; } }
With Constructor Property Promotion
class Product { public function __construct( private string $name, private float $price ) {} }
Benefits of Integration
Reduced Boilerplate Code:
Cleaner, More Readable Code:
Flexibility with Reflection:
Accessing Attributes with Reflection
class Product { public function __construct( private string $name = 'Unnamed', private float $price = 0.0 ) {} }
Explanation of the Code
Defining the Column Attribute:
Adding Attributes to the Constructor Parameters:
Using Reflection:
Accessing the Constructor:
Iterating Over Parameters:
Fetching Attributes:
Instantiating the Attribute:
Printing Metadata:
Output:
class Product { private string $category; public function __construct( private string $name, private float $price ) { $this->category = 'General'; } }
Common Use Cases
Database Mapping:
Data Validation:
Serialization/Deserialization:
Conclusion
The integration of Constructor Property Promotion with Attributes provides a powerful and concise way to structure classes in PHP. This is particularly useful in systems that rely on metadata, such as ORM, validation, or serialization, making the code more expressive and organized.
The above is the detailed content of PHP ews: Constructor Property Promotion. For more information, please follow other related articles on the PHP Chinese website!