Ответ
Переход с PHP 5.6 на 7.x стал революционным. Вот ключевые нововведения, которые я активно использую:
PHP 7.0:
- Рост производительности в 2-3 раза благодаря Zend Engine 3.0.
- Скалярная типизация с strict mode:
declare(strict_types=1); function calculateDiscount(float $price, int $percent): float { return $price * ($percent / 100); } - Оператор объединения с null (
??):$page = $_GET['page'] ?? 1; // Вместо: $page = isset($_GET['page']) ? $_GET['page'] : 1; - Оператор spaceship (
<=>) для компараторов:usort($products, fn($a, $b) => $a['price'] <=> $b['price']);
PHP 7.4+ и 8.x (после 5.6):
- Свойства-конструкторы (PHP 8.0):
class User { public function __construct(public string $name, private int $id) {} } - Выражение
match(PHP 8.0): Более строгая и выразительная заменаswitch:$statusCode = 200; $message = match ($statusCode) { 200, 201 => 'OK', 404 => 'Not Found', 500 => 'Server Error', default => 'Unknown status', }; - Нулевой безопасный оператор (
?->) (PHP 8.0):$country = $user?->getAddress()?->getCountry(); // Не вызовет ошибки, если $user или адрес null.
Эти изменения кардинально улучшили безопасность, читаемость и поддерживаемость кода.
Ответ 18+ 🔞
Да ты представляешь, какой это был пиздец, когда с PHP 5.6 на семёрку переползали? Это ж не обновление, а как будто из каменного века в будущее телепортировались. Вот реально, овердохуища всего нового навалили.
PHP 7.0:
-
Скорость выросла в 2-3 раза. Новый движок Zend Engine 3.0 — это просто ёперный театр. Старый код, который раньше тормозил как мартышлюшка, после переезда просто полетел. Сам от себя охуел, когда первый раз увидел.
-
Скалярная типизация с
strict mode. Раньше в функцию могло прилететь что угодно — строка, массив, хуй с горы. А теперь можно явно указать, что тебе нужно, и PHP будет следить за этим как хитрая жопа.declare(strict_types=1); function calculateDiscount(float $price, int $percent): float { return $price * ($percent / 100); }Попробуй теперь передать строку — получишь по шапке сразу, а не через три часа дебага. Доверия к коду — ебать ноль, но зато надёжности — овердохуища.
-
Оператор объединения с null (
??). Это просто песня, а не оператор. Раньше чтобы проверить$_GETили$_POST, приходилось строчить эти бесконечные тернарники. Теперь всё в одну строку.$page = $_GET['page'] ?? 1; // Вместо: $page = isset($_GET['page']) ? $_GET['page'] : 1;Красота, блядь. Чихать хотел на все эти
isset(). -
Оператор spaceship (
<=>) для сравнения. Выглядит, конечно, как хуй в пальто, но для сортировок вusort()— просто волшебство.usort($products, fn($a, $b) => $a['price'] <=> $b['price']);Раньше приходилось городить
if'ы с возвратом -1, 0, 1. Теперь одна стрелочка — и всё понятно.
PHP 7.4+ и 8.x (после 5.6):
-
Свойства прямо в конструкторе (PHP 8.0). Это вообще пиздопроебибна. Раньше объявлял свойства, потом в конструкторе их инициализировал — писал одно и то же по три раза. Теперь всё сразу.
class User { public function __construct(public string $name, private int $id) {} }Чувак, это же ебать мои старые костыли, насколько же короче и чище стал код.
-
Выражение
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смотреть противно, честно. -
Нулевой безопасный оператор (
?->) (PHP 8.0). Мечта любого, кто устал проверять цепочки вызовов наnull. Раньше это был ад изif'ов или рискFatal error. Теперь — элегантно и безопасно.$country = $user?->getAddress()?->getCountry(); // Не вызовет ошибки, если $user или адрес null.Если на каком-то этапе
null— вся цепочка просто вернётnull, и всё. Удивление — пиздец, насколько же это удобно.
В общем, переход был как глоток свежего воздуха после десятилетия в подвале. Код стал безопаснее, читабельнее, и поддерживать его теперь не боль в сраку, а почти удовольствие.