Пиши и сокращай — несколько “новых” фишек php, позволяющих писать меньше кода

Php не стоит на месте. С каждой новой версией появляются и новые возможности, которые упрощают нам жизнь. Но довольно часто замечаю, что люди продолжают писать код по-старому, при том, что новые фишки позволяют писать меньше. Давайте разберем несколько из них.

Constructor property promotion

Определение свойств объекта в конструкторе позволяет не производить никаких дополнительных манипуляций с объявлением свойств и присваиванием значений в конструкторе.

Теперь вместо такого:

class UserDto { public string $login; public string $email; public string $fullName; public DateTime $birthdate; public Gender $gender; public function __construct(string $login, string $email, string $fullName, DateTime $birthdate, Gender $gender) { $this->login = $login; $this->email = $email; $this->fullName = $fullName; $this->birthdate = $birthdate; $this->gender = $gender; } }

Можно писать такое:

class UserDto { public function __construct( public string $login, public string $email, public string $fullName, public DateTime $birthdate, public Gender $gender ) { } }

Согласитесь, бойлерплейта стало гораздо меньше. Модификаторы доступа можно использовать любые. Прекрасно работает не только в DTO классах, но и классах-сервисах.

Union Types

Начнем пожалуй сразу с примера:

class TravelPolicyViolation { /** * @var int|string */ private $option; /** * @var UserDto|null */ private $user = null; /** * @return int|string */ public function getOption() { return $this->option; } /** * @return UserDto|null */ public function getUser() { return $this->user; } }

Ох уж эти php-doc — занимают почти столько же места сколько и сам код, а нельзя ли без них!?

Да ведь можно же:

class TravelPolicyViolation { private string|int $option; private ?UserDto $user = null; public function getOption(): int|string { return $this->option; } public function getUser(): ?UserDto { return $this->user; } }

Match expression

Все уже давно привыкли к оператору switch

switch ($statusCode) { case 100: case 200: case 300: $message = null; break; case 400: $message = "Bad request"; break; case 500: $message = "Server error"; break; default: $message = "Unknown error"; break; }

Зачастую switch так и используется, но получается это все громоздко, да еще и про break нужно помнить. На помощь приходит match:

$message = match ($statusCode) { 100, 200, 300 => null, 400 => "Bad request", 500 => "Server error", default => "Unknown error", };

Все вышеперечисленное появилось достаточно давно и пора бы это уже брать себе на вооружение. Технологии не стоят на месте, не останавливайтесь в развитии и вы. Следите за новыми возможностями языка и используйте их.

2626
2 комментария

Комментарий недоступен