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.