Что важное появилось после версии PHP 5.6?

Ответ

Переход с PHP 5.6 на 7.x стал революционным. Вот ключевые нововведения, которые я активно использую:

PHP 7.0:

  1. Рост производительности в 2-3 раза благодаря Zend Engine 3.0.
  2. Скалярная типизация с strict mode:
    declare(strict_types=1);
    function calculateDiscount(float $price, int $percent): float {
        return $price * ($percent / 100);
    }
  3. Оператор объединения с null (??):
    $page = $_GET['page'] ?? 1; // Вместо: $page = isset($_GET['page']) ? $_GET['page'] : 1;
  4. Оператор spaceship (<=>) для компараторов:
    usort($products, fn($a, $b) => $a['price'] <=> $b['price']);

PHP 7.4+ и 8.x (после 5.6):

  1. Свойства-конструкторы (PHP 8.0):
    class User {
        public function __construct(public string $name, private int $id) {}
    }
  2. Выражение match (PHP 8.0): Более строгая и выразительная замена switch:
    $statusCode = 200;
    $message = match ($statusCode) {
        200, 201 => 'OK',
        404 => 'Not Found',
        500 => 'Server Error',
        default => 'Unknown status',
    };
  3. Нулевой безопасный оператор (?->) (PHP 8.0):
    $country = $user?->getAddress()?->getCountry(); // Не вызовет ошибки, если $user или адрес null.

Эти изменения кардинально улучшили безопасность, читаемость и поддерживаемость кода.

Ответ 18+ 🔞

Да ты представляешь, какой это был пиздец, когда с PHP 5.6 на семёрку переползали? Это ж не обновление, а как будто из каменного века в будущее телепортировались. Вот реально, овердохуища всего нового навалили.

PHP 7.0:

  1. Скорость выросла в 2-3 раза. Новый движок Zend Engine 3.0 — это просто ёперный театр. Старый код, который раньше тормозил как мартышлюшка, после переезда просто полетел. Сам от себя охуел, когда первый раз увидел.

  2. Скалярная типизация с strict mode. Раньше в функцию могло прилететь что угодно — строка, массив, хуй с горы. А теперь можно явно указать, что тебе нужно, и PHP будет следить за этим как хитрая жопа.

    declare(strict_types=1);
    function calculateDiscount(float $price, int $percent): float {
        return $price * ($percent / 100);
    }

    Попробуй теперь передать строку — получишь по шапке сразу, а не через три часа дебага. Доверия к коду — ебать ноль, но зато надёжности — овердохуища.

  3. Оператор объединения с null (??). Это просто песня, а не оператор. Раньше чтобы проверить $_GET или $_POST, приходилось строчить эти бесконечные тернарники. Теперь всё в одну строку.

    $page = $_GET['page'] ?? 1; // Вместо: $page = isset($_GET['page']) ? $_GET['page'] : 1;

    Красота, блядь. Чихать хотел на все эти isset().

  4. Оператор spaceship (<=>) для сравнения. Выглядит, конечно, как хуй в пальто, но для сортировок в usort() — просто волшебство.

    usort($products, fn($a, $b) => $a['price'] <=> $b['price']);

    Раньше приходилось городить if'ы с возвратом -1, 0, 1. Теперь одна стрелочка — и всё понятно.

PHP 7.4+ и 8.x (после 5.6):

  1. Свойства прямо в конструкторе (PHP 8.0). Это вообще пиздопроебибна. Раньше объявлял свойства, потом в конструкторе их инициализировал — писал одно и то же по три раза. Теперь всё сразу.

    class User {
        public function __construct(public string $name, private int $id) {}
    }

    Чувак, это же ебать мои старые костыли, насколько же короче и чище стал код.

  2. Выражение match (PHP 8.0). Это не просто замена switch. Это как будто взяли switch, выпилили из него весь говнокод и сделали строгую, умную и красивую штуку. Возвращает значение, не проваливается, требует явного указания всех вариантов или default.

    $statusCode = 200;
    $message = match ($statusCode) {
        200, 201 => 'OK',
        404 => 'Not Found',
        500 => 'Server Error',
        default => 'Unknown status',
    };

    После этого на switch смотреть противно, честно.

  3. Нулевой безопасный оператор (?->) (PHP 8.0). Мечта любого, кто устал проверять цепочки вызовов на null. Раньше это был ад из if'ов или риск Fatal error. Теперь — элегантно и безопасно.

    $country = $user?->getAddress()?->getCountry(); // Не вызовет ошибки, если $user или адрес null.

    Если на каком-то этапе null — вся цепочка просто вернёт null, и всё. Удивление — пиздец, насколько же это удобно.

В общем, переход был как глоток свежего воздуха после десятилетия в подвале. Код стал безопаснее, читабельнее, и поддерживать его теперь не боль в сраку, а почти удовольствие.