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)
Типи 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
атрибут:
#[AllowDynamicProperties]
class User() {}
$user = new User();
$user->foo = 'bar';
Нові класи, інтерфейси, атрибути та функції
PHP 8.2 містить нові класи, інтерфейси, атрибути та функції. Щоб отримати повний список, перегляньте розділ «Нові класи, інтерфейси та функції». Оголошення про випуск PHP 8.2.0.
Ми вже згадували про AllowDynamicProperties
атрибут. Іншим атрибутом є #[\Чутливий параметр]
атрибут, який редагує конфіденційну інформацію в трасі стека:
function sensitiveParametersWithAttribute(
#[\SensitiveParameter]
string $secret,
string $normal
) {
throw new Exception('Error!');
}
Вивчайте більше
Щоб швидше ознайомитися з цими новими функціями, перегляньте Оголошення про випуск PHP 8.2.0 для прикладів до/після PHP 8.2, а також перегляньте ці посилання, щоб дізнатися більше про кожен елемент: