Нововведення в php 7/8

Published: 13/03/25 by stsykalovskyi

Нововведення в php 7/8

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

Випущений у 2015 році, PHP 7 значно підвищив продуктивність і додав важливі можливості.

1. Покращення продуктивності
  • Введений Zend Engine 3.0: покращена швидкість виконання коду, менше споживання пам’яті.

  • У 2 рази швидше за PHP 5.6 завдяки оптимізованому обробнику запитів.

2. Покращена типізація
  • Scalar Type Hints (скалярні підказки типів)

    function add(int $a, int $b): int {
        return $a + $b;
    }
    echo add(2, 3); // 5

     

  • Strict Types (жорстка типізація)

    declare(strict_types=1); // Увімкнення жорсткої типізації
    function multiply(int $x, int $y): int {
        return $x * $y;
    }
    echo multiply("2", "3"); // Fatal Error

     

3. Повернені типи функцій
  • Тепер можна явно вказати, який тип даних повертає функція.

    function getName(): string {
        return "Sergii";
    }
4. Null Coalescing Operator (??)
  • Простий спосіб перевірки на null:

    $username = $_GET['user'] ?? 'Guest'; // Якщо user не існує, буде 'Guest'
5. Spaceship Operator (<=>)
  • Порівнює два значення:

    echo 2 <=> 3; // -1
    echo 3 <=> 3; // 0
    echo 4 <=> 3; // 1
6. Анонімні класи
  • Зручні для швидкого створення об'єктів без іменованих класів:

    $obj = new class {
        public function sayHello() {
            return "Hello!";
        }
    };
    echo $obj->sayHello(); // "Hello!"

PHP 8: Основні нововведення

Випущений у 2020 році, PHP 8 значно покращив продуктивність, розширив систему типізації та додав зручніші інструменти для розробників.

1. Just-In-Time (JIT) Compiler
  • Значне покращення продуктивності: тепер PHP-код компілюється в машинний код, що дозволяє виконувати складні обчислення набагато швидше.

  • Приклад без JIT та з JIT

    • Без JIT: PHP-код інтерпретується під час виконання.

    • З JIT: код компілюється та кешується для швидкого виконання.

2. Union Types (об’єднані типи)
  • Дозволяє вказувати кілька типів для параметрів і повернень функцій:

    function setAge(int|string $age): void {
        echo "Age: $age";
    }
    setAge(25);
    setAge("twenty-five"); // Тепер дозволено
3. Named Arguments (іменовані аргументи)
  • Дозволяє передавати аргументи за іменами, а не за позицією:

    function greet(string $name, int $age) {
        echo "Hello, $name! You are $age years old.";
    }
    greet(age: 30, name: "Sergii"); // Порядок не має значення
4. Attributes (Атрибути)
  • PHP 8 додає офіційну підтримку анотацій у вигляді атрибутів:

    #[Route("/home")]
    class HomeController {
        #[Get]
        public function index() {}
    }
5. Match Expression (альтернатива switch)
  • Більш гнучка альтернатива switch, яка повертає значення.

    $status = 2;
    $message = match ($status) {
        1 => "Pending",
        2 => "Approved",
        3 => "Rejected",
        default => "Unknown"
    };
    echo $message; // "Approved"
6. Nullsafe Operator (?->)
  • Полегшує роботу з null, замість перевірки isset().

    $user = null;
    $username = $user?->profile?->name; // Якщо $user або profile null, не буде помилки
7. Статичні повернені типи
  • Тепер можна використовувати static у повернених типах:

    class ParentClass {
        public static function getInstance(): static {
            return new static();
        }
    }
8. Constructor Property Promotion
  • Спрощує ініціалізацію властивостей у класах.

    class User {
        public function __construct(private string $name, private int $age) {}
    }
9. Weak Maps (Слабкі мапи)
  • Дозволяють зберігати слабкі посилання на об’єкти без запобігання їх збору сміття.

    $map = new WeakMap();
    $obj = new stdClass();
    $map[$obj] = "Data";
10. Fibers (PHP 8.1)
  • Дозволяють асинхронне виконання коду без використання потоків.

    $fiber = new Fiber(function (): void {
        echo "Start\n";
        Fiber::suspend();
        echo "End\n";
    });
    $fiber->start();
    echo "Paused\n";
    $fiber->resume();

Висновок

PHP 7 та 8 принесли значні покращення у продуктивності, типізації та читабельності коду. Основні нововведення:

PHP 7

PHP 8

Scalar Type Hints

JIT Compiler

Return Types

Union Types

Null Coalescing (??)

Named Arguments

Spaceship Operator (<=>)

Attributes

Анонімні класи

Match Expression

 

Nullsafe Operator (?->)

 

Constructor Property Promotion

 

Category: Programming

Tags: interview php programming