PHP 8.4 — Основные изменения

автор Данила Справцев, Senior Web Developer

PHP 8.4 версии

PHP 8.4 выпущен с Property Hooks, упрощённой инициализацией классов и другими нововведениями

21 ноября 2024 года команда PHP выпустила версию 8.4, включающую новые функции для работы с массивами, Property Hooks, упрощённую инициализацию классов без дополнительных скобок и другие улучшения.

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

PHP 8.4 вводит следующие функции для работы с массивами:

  • array_find()

  • array_find_key()

  • array_any()

  • array_all()

Эти функции облегчают поиск и проверку элементов в массивах.

Property Hooks

Вдохновлённые языками Kotlin, C# и Swift, Property Hooks позволяют переопределять действия чтения и записи свойств с помощью коротких или многострочных замыканий.

class User implements Named
{
    private bool $isModified = false;

    public function __construct(
        private string $first,
        private string $last
    ) {}

    public string $fullName {
        // Переопределение действия чтения
        get => $this->first . " " . $this->last;
        // Переопределение действия записи
        set {
            [$this->first, $this->last] = explode(' ', $value, 2);
            $this->isModified = true;
        }
    }
}
    

Property Hooks помогают уменьшить шаблонный код, связанный с геттерами и сеттерами, позволяя определять логику доступа и обновления свойств непосредственно в их определении.

Упрощённая инициализация классов без дополнительных скобок

Ранее для доступа к членам класса при его создании требовалось оборачивать вызов new MyClass() в скобки. В PHP 8.4 это ограничение снято, и теперь можно обращаться к константам, свойствам и методам без дополнительных скобок:

// Ранее требовались оборачивающие скобки
$request = (new Request())->withMethod('GET')->withUri('/hello');

// В PHP 8.4 скобки не требуются
$request = new Request()->withMethod('GET')->withUri('/hello');
    

🔥🔥🔥 Это изменение упрощает синтаксис и приводит PHP в соответствие с другими языками, такими как Java, C# где такие скобки не требуются.

Создание DateTime из Unix Timestamp

В PHP 8.4 добавлен метод createFromTimestamp(), позволяющий создавать объекты DateTime из Unix-времени, включая поддержку микросекунд:

$dt = DateTimeImmutable::createFromTimestamp(1718337072);
echo $dt->format('Y-m-d'); // 2024-06-14

$dt = DateTimeImmutable::createFromTimestamp(1718337072.432);
echo $dt->format('Y-m-d h:i:s.u'); // 2024-06-14 03:51:12.432000
    

Ранее для этого использовался метод createFromFormat(), требующий более сложного синтаксиса.

Новые функции mb_

PHP 8.4 добавляет поддержку многобайтовых строк для функций trim, ltrim, rtrim, ucfirst и lcfirst через новые функции:

  • mb_trim()

  • mb_ltrim()

  • mb_rtrim()

  • mb_ucfirst()

  • mb_lcfirst()

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

Полный список улучшений и нововведений можно найти в официальной документацией PHP 8.4.

Последние статьи

Время от времени опыт трансформируется в текст и приобретает свое место на полке.

Время принимать решение - Готовы обсудить проект?