PHP 8 — что нового в 8-ой версии php

Оглавления для удобной навигации по новым PHP 8 фичам (клик для перехода):

  1. Новые строковые функции
  2. Named Arguments
  3. Constructor property promotion
  4. Match expression

PHP 8.0 Что нового: новые фичи php 8

1. Новые нативные функции для работы со строками

str_contains — для проверки есть ли подстрока в строке.

str_contains(string $haystack, string $needle): bool

str_starts_with, str_ends_with — функции для проверки "начинается ли строка с" и "заканчивается ли строка на"

str_starts_with(string $haystack, string $needle): bool
str_ends_with  (string $haystack, string $needle): bool

2. Named arguments

Теперь можно использовать именованные аргументы. Это может быть полезно, например, когда функция имеет много необязательных аргументов, но нам они не важны и нам важно передать только последний из аргументов.

function namedArgExample(string $arg1, array $arg2 = [], array $arg3 = [], bool $arg4 = false);

namedArgExample('string', arg4: true);

В PHP < 8 мы бы вызывали так:

namedArgExample('string', [], [], true)

3. "Constructor property promotion" или просто "Constructor promotion"

Для меня, это одна из самых полезных фичей новой версии, которая позволяет экономить время разработки и рефакторинга.

Прямо в конструкторе можно указать модификтор доступа любого аргумента будь то private / protected / public, тогда property с таким именем можно нужно не объявлять вовсе. Как можно заметить, никакое присваивание в теле конструктора тоже не нужно, наличие модификатора доступа в конструкторе PHP 8.0 -- автоматически создает проперти с именем, равным именем переменной и присваивает параметр в property.

class A
{
    public function __construct(
        private B $b,
        private RouterInterface $router
    ) {
    }
}

В версиях PHP < 8 мы бы писали так (почти в 3 раза! больше кода!):

class A
{
    private B $b;
    private RouterInterface $router;

    public function __construct(
        private B $b,
        private RouterInterface $router
    ) {
        $this->b = $b;
        $this->router = $router;
    }
}

Используя DI, autowiring и constructor promotion — теперь сплошное удовольствие при подстановке зависимостей в сервис.

Конструктор property промоушен new PHP 8.0 feature

4. match expression

Match expression (см. https://www.php.net/manual/en/control-structures.match.php) — более емкий и читаемый вариант для оператора switch. Есть и отличие от switch: match всегда использует строгое сравнение. Отпадает необходимость в break.

$var = 2;

echo match ($var) {
    2 => 'two',
    3 => 'three',
    default => 'none',
};

Итого про match:

не любой switch можно заменить на match. Вместо простых switch можно исползовать более читаемый и емкий match.

 
 
 

icon Комментарии 0

Ваш комментарий к статье.. (для авторизованных)

ctrl+enter

icon Вход в систему

зарегистрироваться
НОВЫЕ ПОЛЬЗОВАТЕЛИ