🚨⚡🚨 Біткоін по $100к. Час встановлювати Trustee Plus і безкоштовно випускати картку для розрахунків 👉

Вийшов новий реліз PHP 8.4

Наприкінці листопаду цього року вийшов новий реліз PHP 8.4.1, котрий розпочинає собою нову — 4-у гілку 8-ї версії популярного мовного інтерпретатора сценарного типу. Як і завжди, розробники розподілили задачі за кількома напрямками — очищення від застарілих конструкцій та методів, виправлення наявних помилок, вдосконалення функціоналу та введення в дію нових методів та функцій. Зокрема, зміни стосувалися розширення можливостей роботи із DOM API, підвищення рівня універсальності модуля PDO (PHP Data Objects), введення аксесорів властивостей об’єктів для можливості віртуалізації властивостей, оптимізації методів управління JIT-компіляцією, поліпшення роботи системи виводу помилок та багатьох інших кейсів. Розглянемо основні зміни.  

1 коментар
Вийшов новий реліз PHP 8.4

Наприкінці листопаду цього року вийшов новий реліз PHP 8.4.1, котрий розпочинає собою нову — 4-у гілку 8-ї версії популярного мовного інтерпретатора сценарного типу. Як і завжди, розробники розподілили задачі за кількома напрямками — очищення від застарілих конструкцій та методів, виправлення наявних помилок, вдосконалення функціоналу та введення в дію нових методів та функцій. Зокрема, зміни стосувалися розширення можливостей роботи із DOM API, підвищення рівня універсальності модуля PDO (PHP Data Objects), введення аксесорів властивостей об’єктів для можливості віртуалізації властивостей, оптимізації методів управління JIT-компіляцією, поліпшення роботи системи виводу помилок та багатьох інших кейсів. Розглянемо основні зміни.  

До речі, на хостингу FREEhost.UA вже додали PHP 8.4, тому одразу після ознайомлення можете спробувати нову версію PHP у роботі.

Вдосконалення функціоналу та виправлення помилок у роботі функцій

Для кращого сприйняття інформації при розгляді внесених змін застосуємо методику розбиття змін по основним компонентам інтерпретатора — ядро, модулі та драйвери. Саме їх стосувалися всі основні вдосконалення. 

Ядро

Хуки або аксесори властивостей об’єктів. Це новий спосіб перехоплення та перевизначення поведінки об’єктів при виконанні операцій читання та запису їх властивостей. Їх використання, зокрема, дозволяє оперувати віртуальними властивостями замість реальних та не залежати від шаблонних get () та set () функцій.

Асиметрична видимість властивостей об’єктів. З’явилася можливість керувати видимістю властивостей об’єктів окремо для операцій читання (функція get ()) та запису (функція set ()). Це дозволяє значно зменшити залежність від стандартних методів get ()-функцій для управління значеннями властивостей.

Lazy об’єкти. Особливість Lazy об’єктів полягає в тому, що їх ініціалізація може бути відкладена до поки не буде звернення до самого об’єкту. Це дозволяє забезпечити роботу Фреймворків та бібліотек без необхідності негайного отримання значень залежностей для їх ініціалізації.

Атрибут #[\Deprecated]. Введення атрибута дозволило отримати паралельний системному спосіб маркування функцій, методів та констант класів у якості застарілих. В результаті, замість системної буде видаватися помилка рівня E_USER_DEPRECATED, що покращує видачу повідомлень про помилки шляхом включення до них додаткових пояснень.  

Об’єднання в ланцюжок викликів оператора new без круглих дужок. Тепер для кожного виразу, у якому за допомогою конструктору створюється новий об’єкт, можливе розіменування. Це дозволяє по ланцюжку звертатися до властивостей об'єкта без заключення виразу в дужки, що, зокрема, спрощує його синтаксис.

Зміни в управлінні файберами. Нині відсутнє блокування файберів під час запуску деструктору, що дозволяє їх переключати за необхідності. Деструктори можуть виконуватися в окремому файбері.

Зміни у назві Замикань. Тепер ці назви включають ім’я батьківської функції та строчки, у котрій воно визначено. Це допомагає розрізняти Замикання при виводі даних у процесі  налагодження програми.

Відбулися зміни у Обробнику виводу. Значення прапорців статусу завжди будуть очищуватися, якщо вони були передані параметру flags, котрий належить функції ob_start () Функція output_add_rewrite_var (), котра слугує для перезапису хостів, тепер буде визначатися значеннями опції url_rewriter.hosts

Змінені характеристики мовних конструкцій exit () та die () (Без зворотної сумісності) Тепер замість строкових значень ними підтримуються лише значення, котрі належать до  типу callable. На їх роботу тепер впливають значення директиви strict_types конструкції declare, і у випадку передачі недопустимих типів буде видаватися відповідна помилка. Те ж саме стосується конструкції die ().

Зміна рівня помилок при рекурсії (без зворотної сумісності). Якщо при виконанні операції порівняння виявляється рекурсія, буде видаватися помилка рівню Error.

Заборонена опосередкована модифікація властивостей об’єктів, для яких встановлений дозвіл «для читання» (без зворотної сумісності). Тепер при опосередкованій зміні  властивостей усередині методу _clone () буде видаватися фатальна помилка.

Був змінений тип констант PHP_DEBUG та PHP_ZTS (без зворотної сумісності). Тепер вказані константи належать до типу bool.

Видалений рівень помилки E_STRICT (без зворотної сумісності). Також застаріла однойменна константа.

Покращення у підтримці ОС Windows. Внесено виправлення у механізмі підтримці процесором команд AVX (2) для MSVC-збірок. Для збірок із підтримкою AVX-512 інструкцій тепер необхідно прописувати відповідне значення для параметра --enable-native-intrinsics.

Модулі

cURL:

  • з’явилося значення feature_list, що повертається функцією curl_version () Feature_list — це асоціативний масив із набором функцій для вказаного модулю;
  • з’явилося значення posttransfer_time_us для функції curl_getinfo () Значення зберігає кількість мкс, котрі відраховуються від початку до завершення передачі останнього байту;
  • введені константи: CURL_HTTP_VERSION_3ONLY та CURL_HTTP_VERSION_3 Вказані константи використовуються як прапорці для CURLOPT_HTTP_VERSION;
  • введена нова константа CURLOPT_SERVER_RESPONSE_TIMEOUT Заміна для CURLOPT_FTP_RESPONSE_TIMEOUT;
  • введені нові константи: CURLOPT_PREREQFUNCTION та CURLOPT_DEBUGFUNCTION Можуть приймати значення, котрі мають тип callable. 

DOM:

  • додано новий простір імен із назвою DOM та новими класами (DOM API). Класи виправляють у модулі давні  помилки та додають декілька функцій, котрі покращують роботу із документами. Новий API сумісний із HTML 5, що дозволяє обробляти відповідні веб-документи. Попередні класи доступні для забезпечення сумісності;
  • додано метод DOMNode:compareDocumentPosition () та пов’язаний з ним набір констант: DOCUMENT_POSITION_CONTAINS, DOCUMENT_POSITION_PRECEDING, DOCUMENT_POSITION_DISCONNECTED та деякі інші.

OpenSSL:

  • з’явилася підтримка ключів Curve25519 та Curve448.  Для їх підтримки були додані додаткові поля до наступних функцій: openssl_verify (), openssl_pkey_new (), openssl_sign () та openssl_pkey_get_details ();
  • додано реалізацію алгоритму хешування PASSWORD_ARGON2. ля його роботи необхідна NTS-збірка;
  • виправлено роботу функції openssl_csr_new (). Тепер в параметрі extra_attributes вказаної функції встановлюється атрибут CSR замість унікальної назви об'єкта.

CRE:

  • оновлена pcre2-бібліотека. Стала доступною підтримка JIT-компілятором LoongArch-архітектури.

PDO:

  • додано підкласи, орієнтовані на драйвери. Покращилася підтримка унікальних для кожної з баз даних функцій. Можуть створюватися шляхом створення екземпляра підкласу визначеного драйвера або за допомогою виклику: PDO:connect ();
  • підтримка SQL-парсерів, орієнтованих на  драйвери. Це розширює можливості по роботі із різними типами БД;
  • типізація констант у класах (Без зворотної сумісності). У модулі тепер буде оголошуватися тип для констант у власних класах.

Phar:

  • підтримка міток часу Unix для Zip-архівів.

Reflection:

  • додана властивість name до ReflectionAttribute. Покращує налагодження програми у процесі її обробки;
  • додано ряд нових констант та методів для Lazy об’єктів;
  • типізація констант у класах (без зворотної сумісності). У межах модуля буде оголошуватися тип для констант, котрі використовуються у класах. 

SOAP:

  • вдосконалено простір імен у карті класів. Тепер є можливість вказувати у карті класів записи таким чином, щоб тип у обраному просторі імен  перетворювався у визначений клас. Наприклад:'{http://cafe.com}one' => 'OneClass';
  • тепер операції збереження сесій реалізуються шляхом загального модуля сесій;
  • змінилися характеристики властивості SoapClient:$typemap (Без зворотної сумісності). Тепер вказана властивість представлена у вигляді масиву значень, а не ресурсом, як було раніше. Відповідно, підхід до її перевірки також змінився. Тепер її треба перевіряти на наявність нульових значень. Наприклад: $car->typemap≠= null.

XSL: 

  • дозволено використання одинарних та подвійних лапок у параметрах.

Opcache (без зворотної сумісності):

  • збільшено максимальне значення директиви interned_strings_buffer для 64-х розрядних архітектур. Тепер це значення становить майже 32,8 Gb, що у вісім разів більше попереднього значення;
  • змінилися значення параметрів конфігурації JIT-компілятора, встановлені за замовчуванням та спосіб управління JIT-компіляцією. Включення JIT-компіляції тепер здійснюється шляхом зміни значення директиви opcache.jit із disable (встановлене за замовчуванням) на tracing.

LibXML:

  • вдосконалена робота функції libxml_set_streams_context (). При спробі передати функції «непотоковий» ресурс, одразу видається помилка рівню TypeError. Раніше помилка видавалася вже після появи відповідного контексту.

Драйвери

PDO_MYSQL:

  • додано парсер, орієнтований на користувача. Особливості парсеру: підтримка літеральних ідентифікаторів зі зворотними лапками, підтримка літералів із подвійними та одинарними лапками із подвоєнням та підтримка різних видів коментарів.

ODBC (без зворотної сумісності):

  • функції драйверу тепер повертають значення Odbc\Result та Odbc\Connection замість ресурсних змінних _result та _connection;
  • змінився спосіб реагування функції odbc_fetch_row () для випадку row <= 0. Тепер замість повернення функцією значення false, лише видається відповідне повідомлення.

PDO_PGSQL:

  • додано парсер, орієнтований на користувача;
  • зміна рівню пріоритету облікових даних при підключенні конструктору PDO (Без зворотної сумісності). Тепер облікові дані, вказані у DSN-запису мають вищий пріоритет порівняно із даними, вказаними у інших аргументах конструктору. 

PDO_FIREBIRD:

  • змінився тип атрибуту ATTR_AUTOCOMMIT (Без зворотної сумісності). Тепер вказаний атрибут належить до логічного типу і, відповідно, завжди повертає значення типу bool.

Хостинг-провайдра FREEhost запрошує підписатися на їхній Telegram-канал, де можна почитати корисну інформацію про PHP, адміністрування серверів та DevOps.

Читайте головні IT-новини країни в нашому Telegram
Читайте головні IT-новини країни в нашому Telegram
По темi
Читайте головні IT-новини країни в нашому Telegram

Хочете повідомити важливу новину? Пишіть у Telegram-бот

Головні події та корисні посилання в нашому Telegram-каналі

Обговорення
0

Вже й на хостингу додали. Молодці!