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

Відбувся реліз мови програмування PHP 8.0

Випущено мову програмування PHP 8.0

У PHP 8.0 є маса нововведень, які повинні поліпшити роботу системи. Крім підтримки JIT-компілятора для прискорення коду, існують і інші оптимізації.

Підтримка JSON тепер вважається основною частиною мови, яка завжди доступна за замовчуванням. Раніше вона була представлена додатковим модулем, який потрібно було підключити.

Версія 8 підтримує іменовані аргументи, що дозволяє вказувати їх імена замість порядку. Існує підтримка атрибутів структурованих метаданих за класами, властивостями, функціями, методами, параметрами, константами. В інших мовах це часто називають декораторами або анотаціями.

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

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

  • Увімкніть JIT-компілятор. PHP переводить вихідний код скриптів PHP в проміжне представлення (байт-код), яке потім виконується в Zend VM. JIT допоможе ще більше підвищити продуктивність шляхом перетворення байт-коду в специфічний для платформи машинний код, який може бути безпосередньо виконаний процесором, минаючи інтерпретатор байт-коду в Zend VM.

    Переваги використання JIT помітні при виконанні конструкцій, для яких продуктивність процесора має першочергове значення, наприклад, інтенсивні математичні розрахунки або обробка в циклах даних, що знаходяться в оперативній пам'яті. У деяких синтетичних тестах застосування JIT призводило до збільшення продуктивності в 2-3 рази. У деяких обчислювальних додатках спостерігається збільшення продуктивності в 1,5-2 рази, але в типових веб-додатках продуктивність мало чим відрізняється від PHP 7.4, так як вузьким місцем є введення-виведення.

  •  Підтримка іменованих аргументів функції, які дозволяють передавати функції значення, прив'язані до імен, що означає, що ви можете передавати аргументи в будь-якому порядку та визначати необов'язкові аргументи. Наприклад, "array_fill(start_index: 0, кількість: 100, значення: 50)".
  • При виклику методів допускається використання оператора "?" , що дозволяє ініціювати виклик тільки при наявності методу, що дозволяє уникнути зайвих перевірок на повернення значення "null". Наприклад, "$dateAsString = $booking->getStartDate()?->asDateTimeString()";
  •  Підтримка типів об'єднань, які визначають колекції двох і більше типів (наприклад, "public function foo(Foo| Барна $input): інт|плоузд;»).
  •  Підтримка атрибутів (анотацій), які дозволяють прив'язувати метадані (наприклад, інформацію про тип) до класів без використання синтаксису Docblock.
  • Підтримка виразів match , які, на відміну від switch, можуть повертати значення, підтримує комбінацію умов, використовує сильне порівняння типів і не вимагає оператору "break".
       $result = match($input) {
           0 => "привіт",
           '1', '2', '3' => "світ",
       };
    
  • Спрощений синтаксис визначення класу, що дозволяє об'єднати визначення конструктора і властивості.
  • Новий тип повернених значень – статичний .
  • Новий тип - змішаний , за допомогою якого функція може визначати прийом параметрів з різними типами.
  • Кинути вираз для обробки винятків.
  • WeakMap для створення об'єктів, які можна пожертвувати при зборі сміття (наприклад, для зберігання необов'язкових кешів).
  • Можливість використання виразу "::class" для об'єктів (аналогічно виклику get_class()).
  • Можливість визначати винятки в блоці улову, які не прив'язані до змінних.
  • Можливість залишати символ коми після останнього елемента в списку параметрів функції.
  • Новий рядковий інтерфейс для ідентифікації будь-яких типів рядків або даних, які можна перетворити в рядок (для чого доступний метод __toString().
  • Нова функція str_contains(), спрощений аналог strpos для визначення входження підрядки, а також функції str_starts_with() і str_ends_with() для перевірки збігів на початку і кінці рядка.
  • Додано функцію fdiv() , яка виконує операцію ділення без відображення помилки в разі ділення на нуль.
  •  Логіка об'єднання рядків була змінена. Наприклад, вираз 'echo 'sum:' . $a + $b' раніше інтерпретувався як 'echo('сума:' . $a) + $b' і в PHP 8 буде розглядатися як 'echo'sum:' . ($a + $b)'.
  • Посилена перевірка арифметичних і розрядних операцій, наприклад, вирази «[] % [42]» і «$object + 4» приведуть до помилки.
  • Реалізовано стабільний алгоритм сортування , в якому порядок одних і тих же значень зберігається при різних пусках.
  • Змінено поведінку під час порівняння рядкових і числових типів

Інші новини

Найкраща ціна