Обновление языка PHP до версии 8.2

Обновление языка PHP до версии 8.2

PHP 8.2 — это крупное обновление языка PHP. Он содержит множество новых функций, включая классы только для чтения, null, false и true в качестве автономных типов, устаревшие динамические свойства, улучшения производительности и многое другое.

Классы только для чтения

PHP < 8.2

class BlogData
{
    public readonly string $title;

    public readonly Status $status;

    public function __construct(string $title, Status $status){
        $this->title = $title;
        $this->status = $status;
    }
}

PHP 8.2

readonly class BlogData
{
    public string $title;

    public Status $status;

    public function __construct(string $title, Status $status){
        $this->title = $title;
        $this->status = $status;
    }
}

Типы дизъюнктивной нормальной формы

PHP < 8.2

class Foo {
    public function bar(mixed $entity) {
        if ((($entity instanceof A) && ($entity instanceof B)) || ($entity === null)) {
            return $entity;
        }

        throw new Exception('Invalid entity');
    }
}

PHP 8.2

class Foo {
    public function bar((A&B)|null $entity) {
        return $entity;
    }
}

Типы DNF позволяют нам комбинировать типы объединения и пересечения , следуя строгому правилу: при объединении типов объединения и пересечения типы пересечения должны быть сгруппированы скобками.

Разрешить null, false и true как автономные типы

PHP < 8.2

class Falsy
{
    public function almostFalse(): bool { /* ... */ *}

    public function almostTrue(): bool { /* ... */ *}

    public function almostNull(): string|null { /* ... */ *}
}

PHP 8.2

class Falsy
{
    public function alwaysFalse(): false { /* ... */ *}

    public function alwaysTrue(): true { /* ... */ *}

    public function alwaysNull(): null { /* ... */ *}
}

Новое «случайное» расширение

use Random\Engine\Xoshiro256StarStar;
use Random\Randomizer;

$blueprintRng = new Xoshiro256StarStar(
    hash('sha256', "Example seed that is converted to a 256 Bit string via SHA-256", true)
);

$fibers = [];
for ($i = 0; $i < 8; $i++) {
    $fiberRng = clone $blueprintRng;
    // Метод 'jump()' Xoshiro256** перемещает схему вперед на 2**128 шагов, как если бы вызывался
		// 'generate()' 2**128 раз, что дает Fiber 2**128 уникальных значений без необходимости повторного заполнения.
    $blueprintRng->jump();

    $fibers[] = new Fiber(function () use ($fiberRng, $i): void {
        $randomizer = new Randomizer($fiberRng);

        echo "{$i}: " . $randomizer->getInt(0, 100), PHP_EOL;
    });
}

// По умолчанию рандомизатор будет использовать CSPRNG.
$randomizer = new Randomizer();

// Несмотря на то, что волокна выполняются в случайном порядке, они будут печатать одно и то же значение
// каждый раз, потому что у каждого свой уникальный экземпляр ГСЧ.
$fibers = $randomizer->shuffleArray($fibers);
foreach ($fibers as $fiber) {
    $fiber->start();
}

Расширение random предоставляет новый объектно-ориентированный API для генерации случайных чисел. Вместо того, чтобы полагаться на генератор случайных чисел (RNG) с глобальным заполнением, использующий алгоритм Mersenne Twister, объектно-ориентированный API предоставляет несколько классов («движков»), обеспечивающих доступ к современным алгоритмам, которые сохраняют свое состояние в объектах, чтобы обеспечить несколько независимых последовательностей.

Класс \Random\Randomizer предоставляет высокоуровневый интерфейс для использования случайности движка для генерации случайного целого числа, для перетасовки массива или строки, для выбора случайных ключей массива и многого другого.

Константы в трейтах

PHP < 8.2

trait Foo
{
    public const CONSTANT = 1;
}

PHP 8.2

class Bar
{
    use Foo;
}

var_dump(Bar::CONSTANT); // 1
var_dump(Foo::CONSTANT); // Error

Вы не можете получить доступ к константе через имя трейта, но вы можете получить доступ к константе через класс, который использует трейт.

Устаревшие динамические свойства

PHP < 8.2

class User
{
    public $name;
}

$user = new User();
$user->last_name = 'Doe';

$user = new stdClass();
$user->last_name = 'Doe';

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

Создание динамических свойств устарело, чтобы избежать ошибок и опечаток, если только класс не соглашается на это с помощью #[\AllowDynamicProperties] атрибута. stdClass допускает динамические свойства.

Это изменение не влияет на использование магических методов get/set

Новые классы, интерфейсы и функции

  • Новая mysqli_execute_query функция и mysqli::execute_query метод.
  • Новые #[\AllowDynamicProperties] и #[\SensitiveParameter] атрибуты.
  • Новые методы ZipArchive::getStreamIndex, ZipArchive::getStreamName и ZipArchive::clearError
  • Новые ReflectionFunction::isAnonymous и ReflectionMethod::hasPrototype методы.
  • Новые curl_upkeep, memory_reset_peak_usage, ini_parse_quantity, libxml_get_external_entity_loader, sodium_crypto_stream_xchacha20_xor_ic, openssl_cipher_key_length функции.

Прекращение поддержки и нарушение обратной совместимости

  • Устаревшая ${} интерполяция строк.
  • Устарело utf8_encode и utf8_decode работает.
  • Методы DateTime::createFromImmutable и DateTimeImmutable::createFromMutable имеет предварительный тип возвращаемого значения static.
  • Расширения ODBC и PDO_ODBC экранирование имени пользователя и пароля.
  • Функции strtolower и strtoupper больше не зависят от региональных настроек.
  • Методы SplFileObject::getCsvControl, SplFileObject::fflush, SplFileObject::ftell, SplFileObject::fgetc и SplFileObject::fpassthru обеспечивают их подпись.
  • Метод SplFileObject::hasChildren имеет предварительный тип возвращаемого значения false.
  • Метод SplFileObject::getChildren имеет предварительный тип возвращаемого значения null.
  • Внутренний метод SplFileInfo::_bad_state_exу старел.

Похожие статьи

Генератор QR Code на Laravel

Это оболочка для генератора QR-кодов для PHP, автономной библиотеки для создания QR-кодов в форматах PNG и SVG.

IDE Helper генератор

Этот пакет создает вспомогательные файлы, которые позволяют вашей среде IDE обеспечить точное автозаполнение. Генерация выполняется на основе файлов вашего проекта, поэтому они всегда актуальны.

Sanctum guard для Authorization: Bearer Token

Пример использования кастомного Laravel Guard для авторизации пользователя по ключу Bearer без сохранения состояния.

Copyright © 2026 PHP Blog - шпаргалки программиста