Вышла новая версия PHP 8.4
Вышла очередная минорная версия PHP 8.4.
Как и все минорные обновления PHP поддерживает обратную совместимость.
А это означает, что вы сможете легко обновиться, ничего не меняя в своем коде.
PHP 8.4 — большое обновление языка PHP.
Оно содержит множество новых возможностей, таких как хуки свойств, асимметричная область видимости свойств, обновление DOM API, улучшена производительность, исправлены ошибки и многое другое.
Хуки свойств
Хуки свойств обеспечивают поддержку вычисляемых свойств, которые могут быть понятны IDE и инструментам статического анализа, без необходимости писать DocBlock-комментарии, которые могут не совпадать. Кроме того, они позволяют выполнять надёжную предварительную или последующую обработку значений, без необходимости проверять, существует ли в классе соответствующий геттер или сеттер.
class Locale
{
public string $languageCode;
public string $countryCode
{
set (string $countryCode) {
$this->countryCode = strtoupper($countryCode);
}
}
public string $combinedCode
{
get => \sprintf("%s_%s", $this->languageCode, $this->countryCode);
set (string $value) {
[$this->countryCode, $this->languageCode] = explode('_', $value, 2);
}
}
public function __construct(string $languageCode, string $countryCode)
{
$this->languageCode = $languageCode;
$this->countryCode = $countryCode;
}
}
$brazilianPortuguese = new Locale('pt', 'br');
var_dump($brazilianPortuguese->countryCode); // BR
var_dump($brazilianPortuguese->combinedCode); // pt_BR
Асимметричная область видимости свойств
Область видимости записи свойства теперь может контролироваться независимо от области видимости чтения свойства, что уменьшает необходимость использования шаблонных методов-геттеров для раскрытия значения свойства без возможности его изменения извне класса.
class PhpVersion
{
public private(set) string $version = '8.4';
public function increment(): void
{
[$major, $minor] = explode('.', $this->version);
$minor++;
$this->version = "{$major}.{$minor}";
}
}
Атрибут #[\Deprecated]
Новый атрибут #[\Deprecated] расширяет существующий механизм объявления сущности устаревшей для пользовательских функций, методов и констант классов.
class PhpVersion
{
#[\Deprecated(
message: "use PhpVersion::getVersion() instead",
since: "8.4",
)]
public function getPhpVersion(): string
{
return $this->getVersion();
}
public function getVersion(): string
{
return '8.4';
}
}
Объектно-ориентированный API для BCMath
Новый объект BcMath\Number
позволяет использовать объектно-ориентированный стиль и стандартные математические операторы при работе с числами произвольной точности.
Эти объекты неизменяемы и реализуют интерфейс Stringable
, поэтому их можно использовать в строковых контекстах, например, echo $num
.
use BcMath\Number;
$num1 = new Number('0.12345');
$num2 = new Number('2');
$result = $num1 + $num2;
echo $result; // '2.12345'
var_dump($num1 > $num2); // false
Новые функции array_*()
Добавлены функции array_find()
, array_find_key()
, array_any()
и array_all()
.
$animal = array_find(
['dog', 'cat', 'cow', 'duck', 'goose'],
static fn (string $value): bool => str_starts_with($value, 'c'),
);
var_dump($animal); // string(3) "cat"
new MyClass()->method()
без скобок
К свойствам и методам только что инициализированного объекта теперь можно обращаться, не оборачивая выражение new
в круглые скобки.
class PhpVersion
{
public function getVersion(): string
{
return 'PHP 8.4';
}
}
var_dump(new PhpVersion()->getVersion());
PHP 8.4 имеет высокую производительность, улучшенный синтаксис, надёжную систему типов. Новая реализация JIT на основе IR Framework. Добавлено множество новых функций и методов.
Обо всех изменениях можно прочитать ниже по ссылке. Ссылка на источник: https://www.php.net/releases/8.4/en.php