В PHP 8 появилась фантастическая функция под названием Продвижение свойств конструктора. Если вы новичок в PHP или программировании в целом, это может показаться немного сложным. Но не волнуйтесь! Этот блог расскажет вам, что это такое, почему он полезен и как его можно использовать, а также приведёт множество примеров кодирования. Давайте начнем!
До PHP 8 создание класса со свойствами и их инициализация в конструкторе требовало довольно много повторяющегося кода. Благодаря Продвижению свойств конструктора PHP 8 упрощает этот процесс, позволяя объявлять и инициализировать свойства класса непосредственно в параметрах конструктора.
Продвижение свойств конструктора — это не просто экономия нескольких строк кода, а создание более чистого, легко читаемого и простого в обслуживании кода. Это особенно ценно для новичков, которым традиционный способ написания конструкторов может показаться немного сложным.
Давайте начнем со сравнения традиционного способа написания классов и конструкторов с новым способом, представленным в PHP 8.
class Car { public string $make; public string $model; public int $year; public function __construct(string $make, string $model, int $year) { $this->make = $make; $this->model = $model; $this->year = $year; } } $car = new Car('Toyota', 'Corolla', 2020);
В этом примере нам нужно объявить свойства ($make, $model и $year), а затем назначить их внутри конструктора. Повторений много, особенно когда имеешь дело с классами, имеющими множество свойств.
С PHP 8 (продвижение свойств конструктора)
class Car { public function __construct( public string $make, public string $model, public int $year ) {} } $car = new Car('Toyota', 'Corolla', 2020);
С помощью продвижения свойств конструктора вы объявляете и назначаете свойства в параметрах конструктора. В результате получается более краткое и читаемое определение класса.
Чтобы полностью понять силу продвижения недвижимости в конструкторе, давайте рассмотрим больше примеров в различных сценариях.
Пример 1. Определение класса книги
class Book { public function __construct( public string $title, public string $author, public int $pages, public bool $isAvailable = true ) {} } $book = new Book('1984', 'George Orwell', 328); echo $book->title; // Output: 1984 echo $book->isAvailable; // Output: 1 (true)
В этом классе Book свойство isAvailable имеет значение по умолчанию true. Если вы не укажете этот параметр при создании экземпляра класса, ему автоматически будет присвоено значение true.
Пример 2. Создание класса заказа
class Order { public function __construct( public int $orderId, public string $product, public float $price, public string $status = 'pending' ) {} } $order = new Order(123, 'Laptop', 999.99); echo $order->status; // Output: pending $order2 = new Order(124, 'Smartphone', 599.99, 'shipped'); echo $order2->status; // Output: shipped
Здесь класс Order включает свойство status со значением по умолчанию — «ожидание». Однако вы можете переопределить это значение, указав другой статус при создании заказа.
Пример 3. Создание класса профиля пользователя
class UserProfile { public function __construct( public string $username, public string $email, public int $age, private string $password, protected string $role = 'user' ) {} public function getPassword(): string { return $this->password; } } $userProfile = new UserProfile('johndoe', '[email protected]', 25, 'secret'); echo $userProfile->username; // Output: johndoe echo $userProfile->getPassword(); // Output: secret echo $userProfile->role; // Error: Cannot access protected property
В классе UserProfile свойство пароля является закрытым, то есть к нему нельзя получить доступ непосредственно за пределами класса. Вместо этого вы используете метод getPassword() для его получения. Свойство роли защищено, поэтому доступ к нему возможен только внутри самого класса или из его подклассов.
Пример 4: класс продукта с продвижением свойств конструктора
class Product { public function __construct( public string $name, public float $price, public int $stock = 0 ) {} } $product = new Product('Laptop', 999.99, 10); echo $product->name; // Output: Laptop echo $product->stock; // Output: 10
В этом примере показано, как можно использовать продвижение свойства конструктора для создания класса Product, который включает значение по умолчанию для свойства Stock.
**Меньше шаблонного кода: **Вам не нужно писать повторяющийся код для объявления и инициализации свойств.
Повышенная читабельность: Определение класса стало более кратким и понятным с первого взгляда.
Уменьшение количества ошибок: Комбинируя объявление свойства и инициализацию, становится меньше места для ошибок.
Продвижение свойств конструктора в PHP 8 — это мощная функция, которая может значительно улучшить способ написания классов. Уменьшая количество шаблонного кода, повышая читаемость и делая ваш код более удобным в сопровождении, эту функцию оценят как новые, так и опытные разработчики.
Независимо от того, создаете ли вы небольшой проект или большое приложение, Constructor Property Promotion поможет вам написать более чистый и эффективный PHP-код. Так что давайте, попробуйте в своем следующем проекте и наслаждайтесь преимуществами этой потрясающей функции!
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3