Вышла новая версия PHP 8.2
Вышла очередная минорная версия PHP 8.2.
Как и все минорные обновления PHP поддерживает обратную совместимость.
А это означает, что вы сможете легко обновиться, ничего не меняя в своем коде.
Полный список изменения можно посмотреть тут.
Версия содержит множество новых возможностей, включая перечисления, readonly-классы, самостоятельные типы null, false и true, устаревшие динамические свойства, улучшения производительности и многое другое.
Readonly-классы
Начиная с PHP 8.2, класс может быть помечен модификатором readonly
. Пометка класса как readonly добавит модификатор readonly к каждому объявленному свойству и предотвратит создание динамических свойств.
Пример:
readonly class BlogData
{
public string $title;
public Status $status;
public function __construct(string $title, Status $status)
{
$this->title = $title;
$this->status = $status;
}
}
Самостоятельные типы null, false и true
В PHP 8.2 можно задавать возвращаемые типы методов как null, false и true.
Пример:
class Falsy
{
public function alwaysFalse(): false { /* ... */ *}
public function alwaysTrue(): true { /* ... */ *}
public function alwaysNull(): null { /* ... */ *}
}
Новый модуль Random
В PHP 8.2 появился новый класс Random\Randomizer предоставляющий высокоуровневое API для случайности, обеспечиваемой классом Random\Engine. Теперь можно реализовывать разные алгоритмы ГСЧ, а не только Вихрь Мерсенна, который работает по умолчанию в функции rand
.
Пример:
$array = [1, 2, 3, 4, 5];
$randomizer = new Randomizer();
$randomInt = $randomizer->getInt($array);
Константы в трейтах
В трейтах теперь можно задавать константы. Но для доступа надо использовать класс где этот трейт используется.
Пример:
trait Foo
{
public const CONSTANT = 1;
public function bar(): int
{
return self::CONSTANT; // Fatal error
}
}
class Bar
{
use Foo;
}
var_dump(Bar::CONSTANT); // 1
Динамические свойства устарели
С версии PHP 8.2 динамические свойста классов считаются устаревшими.
Пример:
class User
{
public $name;
}
$user = new User();
$user->last_name = 'Doe'; // Deprecated notice
$user = new stdClass();
$user->last_name = 'Doe'; // Still allowed
Ссылка на источник: https://www.php.net/releases/8.2/en.php