• Время чтения ~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 сочетают в себе типы объединения и пересечения:

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, и просмотрите эти ссылки для получения более подробной информации о каждом элементе:

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