ProIT: медіа для профі в IT
2 хв.

Випущено PHP 8.3 із типізованими константами класу і функцією json_validate

author avatar ProIT NEWS

Команда PHP випустила PHP 8.3 із типізованими константами класу, функцією json_validate(), динамічним отриманням константи класу, атрибутом #[Override] і ще низкою нових функцій, повідомляє Laravel News.

Типізовані константи класу

У PHP 8.2 все ще було неможливо оголосити постійні (const) типи, тому що це могло призвести до плутанини:

interface I {    const TEST = "Test";  // We may naively assume that the TEST constant is always a string} class Foo implements I {    const TEST = [];      // But it may be an array...} class Bar extends Foo {    const TEST = null;    // Or null}

Ось приклад того, як типізовані константи виглядають у PHP 8.3:

interface I {    const string TEST = E::TEST;   // I::TEST is a string as well} class Foo implements I {    use T;     const string TEST = E::TEST;  // Foo::TEST must also be a string} class Bar extends Foo {    const string TEST = "Test2";  // Bar::TEST must also be a string, but the value can change} // Error example // Fatal error: Cannot use array as value for class constant// Foo::PHP of type stringclass Buzz implements I {    const string PHP = [];}

Функція json_validate().

Щоб перевірити JSON у PHP, вам потрібно або налаштувати прапор JSON_THROW_ON_ERROR, використовувати json_last_error або навіть просто перевірити nullпід час виклику json_decode():

json_decode(json: '{"foo": "bar}', flags: JSON_THROW_ON_ERROR); // JsonException  Control character error, possibly incorrectly encoded.

Починаючи з PHP 8.3, ви також можете перевірити JSON за допомогою функцій json_validate():

// Validjson_validate('{"framework": "Laravel"}'); // true // Invalidjson_validate('{"framework": "Laravel}'); // false json_last_error_msg(); // Control character error, possibly incorrectly encodedjson_last_error(); // 3

Динамічний клас постійної вибірки

У PHP >= 8.2 динамічне отримання константного значення класу було можливе лише за допомогою функції constant(). Наступне могло призвести до синтаксичної помилки:

class Framework {    const NAME = 'Laravel';} $name = 'NAME'; // You could achieve this with the constant() functionconstant(Framework::class . '::' . $name); // Laravel // This following is a syntax error in >=v8.2.0echo Framework::{$name};// ParseError  syntax error, unexpected token ";", expecting "(".

Починаючи з PHP 8.3, ви можете динамічно отримувати доступ до констант із класу:

class Framework {    const NAME = 'Laravel';} $name = 'NAME'; // Syntax error in <= v8.2.0echo Framework::{$name}; // Laravel

Одним із доповнень до PHP 8.3 є надання значення за замовчуванням під час використання змінних середовищ для визначення параметрів INI. Це спростить параметри Docker без необхідності вказувати параметри за замовчуванням як блоки ENV в Dockerfile.

Припустімо, наприклад, що ви хочете дозволити значенню DRUPAL_FPM_PORTENV налаштувати значення INI для пулу wwwFPM:

error_log = syslogdaemonize = false [www]listen = localhost:${DRUPAL_FPM_PORT}

DRUPAL_FPM_PORT має бути визначено.

Тепер ви можете зробити наступне, що може бути знайомим сценарієм bash/shell:

[www]listen = localhost:${DRUPAL_FPM_PORT:-9000}

Уявіть, що ви надсилаєте xdebug.iniфайл як частину вашого Dockerfile для розробки з розумними параметрами за замовчуванням, але дозволяючи розробникам змінювати значення, які вони вважають за потрібне.

Доповнення рандомайзера

PHP 8.3 включає Randomizer Additions, зокрема новий метод getBytesFromString(), завдяки якому зручно отримувати рандомні байти з вихідного рядка:

$randomizer = new \Random\Randomizer(); printf(    "%s.example.com",    $randomizer->getBytesFromString('abcdefghijklmnopqrstuvwxyz0123456789', 16)); // 3zsw04eiubcf82jd.example.com  // Generate a random code for multi-factor authentication$randomizer = new \Random\Randomizer(new \Random\Engine\Secure()); echo implode('-', str_split($randomizer->getBytesFromString('0123456789', 20), 5)); // 11551-80418-27047-42075

Раніше ми повідомляли, що Document Foundation оголосила про загальну доступність LibreOffice 7.6.3 як третього випуску останньої серії безкоштовних офісних пакетів LibreOffice 7.6 із відкритим кодом.

Підписуйтеся на ProIT у Telegram, щоб не пропустити жодну публікацію!

Приєднатися до company logo
Продовжуючи, ти погоджуєшся з умовами Публічної оферти та Політикою конфіденційності.