Команда 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_PORT
ENV налаштувати значення INI для пулу www
FPM:
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, щоб не пропустити жодну публікацію!