The PHP team has released PHP 8.2 today with read-only classes, new stand-alone types, a new random extension, trait constants, а также more:
Классы только для чтения
Основываясь на свойствах только для чтения PHP 8.1, пометка класса как доступного только для чтения делает каждое свойство класса доступным только для чтения и предотвращает создание динамических свойств.
readonly class BlogData
{
public string $title;
public Status $status;
public function __construct(string $title, Status $status)
{
$this->title = $title;
$this->status = $status;
}
}
Типы дизъюнктивных нормальных форм (ДНФ)
Типы DNF сочетают в себе типы объединения и пересечения:
class Foo {
public function bar((A&B)|null $entity) {
if ($entity === null) {
return null;
}
return $entity;
}
}
Null, ЛОЖЬ, and истинный stand-alone types
PHP 8.2 теперь позволяет false
, true
, and нулевой
как самостоятельные виды. Этот пример довольно понятен:
class Falsy
{
public function alwaysFalse(): false { /* ... */ *}
public function alwaysTrue(): true { /* ... */ *}
public function alwaysNull(): null { /* ... */ *}
}
Константы в трейтах
Константы теперь разрешены в трейтах. Вы не можете получить доступ к константам через имя трейта, однако вы можете получить доступ к константе через класс, используя трейт:
trait Foo
{
public const CONSTANT = 1;
public function bar(): int
{
return self::CONSTANT; // Fatal error
}
}
class Bar
{
use Foo;
}
var_dump(Bar::CONSTANT); // 1
Прекращение поддержки динамического свойства
Динамические свойства устарели, а это означает, что вы получите уведомление об устаревании при присвоении значения динамическому свойству:
class User
{
public $name;
}
$user = new User();
$user->last_name = 'Doe'; // Deprecated notice
$user = new stdClass();
$user->last_name = 'Doe'; // Still allowed
У вас также есть возможность разрешить динамические свойства с помощью Разрешить динамические свойства
атрибут:
#[AllowDynamicProperties]
class User() {}
$user = new User();
$user->foo = 'bar';
Новые классы, интерфейсы, атрибуты и функции
PHP 8.2 содержит новые классы, интерфейсы, атрибуты и функции. Полный список см. в разделе «Новые классы, интерфейсы и функции». Объявление о выпуске PHP 8.2.0.
Мы уже упоминали о Разрешить динамические свойства
атрибут. Еще одним атрибутом является #[\Чувствительный параметр]
атрибут, который редактирует конфиденциальную информацию в трассировке стека:
function sensitiveParametersWithAttribute(
#[\SensitiveParameter]
string $secret,
string $normal
) {
throw new Exception('Error!');
}
Учить больше
Чтобы быстро ознакомиться с этими новыми функциями, ознакомьтесь с Объявление о выпуске PHP 8.2.0 страницу с примерами до и после PHP 8.2, и просмотрите эти ссылки для получения более подробной информации о каждом элементе: