• Час читання ~1 хв
  • 10.12.2022

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, а також перегляньте ці посилання, щоб дізнатися більше про кожен елемент:

Comments

No comments yet
Yurij Finiv

Yurij Finiv

Full stack

Про мене

Professional Fullstack Developer with extensive experience in website and desktop application development. Proficient in a wide range of tools and technologies, including Bootstrap, Tailwind, HTML5, CSS3, PUG, JavaScript, Alpine.js, jQuery, PHP, MODX, and Node.js. Skilled in website development using Symfony, MODX, and Laravel. Experience: Contributed to the development and translation of MODX3 i...

Про автора CrazyBoy49z
WORK EXPERIENCE
Контакти
Ukraine, Lutsk
+380979856297