+38/050/370-3627
+38/093/220-0872
+38/044/257-2444
Новини

Подано реліз мови програмування PHP 8.1

Представлений випуск мови програмування PHP 8.1

Представлений реліз мови програмування PHP 8.1 . Нова гілка включає в себе ряд нових функцій, а також кілька змін, які порушують сумісність.

Основні покращення   PHP 8.1:

  •  Додана підтримка перерахування (enum), наприклад, замість класу з константами тепер можна використовувати наступну конструкцію:
  • Додана підтримка легких потоків під назвою Fiber , які дозволяють управляти потоками на низькому рівні. Волокна дозволяють визначати блоки коду, які можна ставити на паузу і відновлювати за аналогією з генераторами, але з будь-якого положення в стеку. Безпосередньо волокна не забезпечують одночасне виконання потоків і вимагають визначення циклу подій, але в той же час дозволяють використовувати один і той же API в коді, що виконується в блокує і неблокуючому режимах. Підтримку волокон планується додати в фреймворки Amphp і ReactPHP.
  • Покращена реалізація кешу об'єктного коду (opcache), що вводить можливість кешування інформації про успадкування класів. Оптимізація дозволила підвищити продуктивність деяких додатків на 5-8%. Інші зміни, що впливають на продуктивність, включають оптимізацію JIT, підтримку jit архітектури ARM64 (AArch64), швидшу роздільну здатність імен класів, оптимізацію бібліотек timelib та ext/date, покращену продуктивність серіалізації та десеріалізації, оптимізацію функцій get_declared_classes(), explode(), strtr(), strnatcmp() та dechex(). В цілому спостерігається зростання продуктивності Symfony Demo на 23,0%, а WordPress на 3,5%.
  • Оператор декомпресії всередині масивів «...$var», що дозволяє шукати існуючі масиви при визначенні нового масиву, розширений для підтримки рядкових ключів (раніше підтримувалися тільки цифрові ідентифікатори). Наприклад, тепер ви можете використовувати у своєму коді:
  • Дозволяється використовувати ключове слово "new" в ініціалізаторах, яке дозволяє використовувати об'єкти в якості значень параметрів за замовчуванням, статичних змінних, глобальних констант і аргументів атрибутів. Також є можливість створювати вкладені атрибути.
  • Можна відзначити властивості класу для доступу тільки для читання (інформація в таких властивостях може бути записана тільки один раз, після чого вона буде недоступна для редагування).
  • Реалізовано новий синтаксис для об'єктів, що викликаються - замикання тепер можна утворювати, викликаючи функцію і передаючи значення «...» (тобто ви можете використовувати myFunc(...) замість Closure::fromCallable('myFunc')), щоб отримати посилання на функцію):
  • Додана повна підтримка типів перетину, які дозволяють створювати нові типи, значення яких повинні потрапляти під кілька типів одночасно. На відміну від типів об'єднань, які визначають колекції двох або більше типів, перетини вимагають, щоб заповнена множина містила не жоден з перерахованих типів, а всі зазначені типи.
  • З'явився новий тип «ніколи», який можна використовувати для інформування статичних аналізаторів про те, що функція перестає виконувати програму, наприклад, кидаючи виняток або виконуючи функцію виходу.
  • Пропонується нова функція array_is_list, яка дозволяє визначити, що ключі в масиві розташовані в порядку збільшення числових значень, починаючи з 0:
  • Тепер ви можете використовувати "остаточне" ключове слово, щоб запобігти перевизначенню констант батьківського класу.
  • Функції fsync і fdatasync пропонуються для примусового збереження змін з дискового кешу.
  • Додана можливість використання приставок «0o» і «0O» для вісімкових чисел, крім раніше використовуваної приставки «0».
  • Застосування $GLOBALS вибірково обмежена, що призведе до порушення зворотної сумісності, але дасть можливість значно прискорити операції з масивами. Зокрема, забороняється писати в $GLOBALS і передавати $GLOBALS покажчиком. Аналіз 2000 пакетів показав, що тільки 23 з них будуть порушені цією зміною. Наприклад, такі вирази, як:
  • Неявні несумісні перетворення поплавкової точки в цілочисельне представлення (int) були застарілими, що призвело до втрати точності. Наприклад, ця зміна застосовується під час перетворення значень ключа масиву, виконання оголошень цілочисельного типу та операторів лише для цілих чисел.
  • Внутрішні методи тепер повинні повернути правильний тип. У PHP 8.1 при поверненні типу, який не відповідає декларації функції, буде відображатися попередження, а ось в PHP 9.0 попередження буде замінено на помилку.
  • Тривала робота над передачею функцій від використання ресурсів до маніпулювання об'єктами. Об'єктам передано функції finfo_* та imap_*.
  • Неприпустимо передавати нульові значення як аргументи внутрішнім функціям, позначеним як ненульові. У PHP 8.1 використання конструкцій str_contains("string", null) призведе до попередження, а в PHP 9 - до помилки.
  • Інтерфейс серійного програмування був застарілим.
  • У багатьох модулях ресурси перетворюються в об'єкти (file_info -> finfo в FileInfo, FTP\Connection, IMAP\Connection, LDAP\Connection| Результат, PgSql\Підключення| Результат, PSpell\Dictionary, GdFont в GD і т.д .).
  • Додана підтримка алгоритмів хешування MurmurHash3 і xxHash.

Інші новини