# PHP 8.0 до 8.5: най-важните новости

> Новости в PHP 8 от 8.0 до 8.5: най-важните функции за всяка версия, примери за код, оттегляния с риск при надграждане и какво е важно за сигурността.

Източник: https://phpsos.de/bg/php/php-8-neuerungen/  
Актуалност: 25.10.2026  
Доставчик: PHP SOS, Спешна помощ за PHP и сигурност на сървъри. Незабавна помощ по WhatsApp: https://wa.me/491736494914?text=%D0%97%D0%B4%D1%80%D0%B0%D0%B2%D0%B5%D0%B9%D1%82%D0%B5%2C%20PHP%20SOS%2C%20%D0%B8%D0%BC%D0%B0%D0%BC%D0%B5%20%D0%BD%D1%83%D0%B6%D0%B4%D0%B0%20%D0%BE%D1%82%20%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%20%D1%81%20%D0%BD%D0%B0%D1%88%D0%B8%D1%8F%20PHP%20%D1%81%D1%8A%D1%80%D0%B2%D1%8A%D1%80.%20%D0%A4%D0%B8%D1%80%D0%BC%D0%B0%3A%20%E2%80%A6%20%D0%A3%D0%B5%D0%B1%D1%81%D0%B0%D0%B9%D1%82%3A%20%E2%80%A6

**Накратко:** PHP 8.0 (ноември 2020 г.) донесе именувани аргументи, атрибути, обединени типове, `match`, nullsafe оператора и JIT компилатор. След това следваха ежегодно: 8.1 с Enums и Fibers, 8.2 с readonly класове, 8.3 с типизирани константи на класове, 8.4 с Property Hooks и 8.5 с pipe оператор и URI разширение. Всяка версия оттегля и стари неща. При надграждането затова значение имат тестовете, а за сигурността е най-важно да се експлоатира поддържан клон с актуално състояние на корекциите.

## Новостите в PHP 8 накратко

Таблицата обобщава основните точки от страниците за издания на php.net. Датите на първото издаване са според php.net.

| Версия | Издадена | Най-важни новости | Избрани оттегляния и несъвместимости |
|---|---|---|---|
| 8.0 | 26.11.2020 | именувани аргументи, атрибути, Constructor Property Promotion, обединени типове, `match`, `?->`, JIT | `0 == 'foobar'` вече е `false`, грешки на типове вместо предупреждения |
| 8.1 | 25.11.2021 | Enums, readonly свойства, First-Class-Callables `strlen(...)`, `new` в инициализатори, пресечни типове, `never`, Fibers | – |
| 8.2 | 08.12.2022 | readonly класове, DNF типове, `null`/`false`/`true` като типове, разширение Random, константи в traits, `#[\SensitiveParameter]` | динамичните свойства са оттеглени |
| 8.3 | 23.11.2023 | типизирани константи на класове, `#[\Override]`, `json_validate()`, `mb_str_pad()`, `php -l` за няколко файла | – |
| 8.4 | 21.11.2024 | Property Hooks, асиметрична видимост, `#[\Deprecated]`, нов DOM API с HTML5, `BcMath\Number`, `array_find()`, Lazy Objects | неявно nullable параметри са оттеглени; IMAP, OCI8, PDO_OCI, pspell към PECL |
| 8.5 | 20.11.2025 | pipe оператор, URI разширение, Clone With, `#[\NoDiscard]`, `array_first()`/`array_last()` | операторът с обратни кавички е оттеглен, `disable_classes` е премахнат |

## PHP 8.0 и 8.1: голямата стъпка

PHP 8.0 направи езика осезаемо по-строг и по-изразителен. Според страницата за издание вътрешните функции вече последователно хвърлят `TypeError` или `ValueError`, вместо само да извеждат предупреждения. Сравненията между числа и низове следват по-чисти правила.

```php
<?php
// PHP 8.0: match сравнява строго и не се нуждае от break
$status = 404;
echo match (true) {
    $status >= 500 => 'Serverfehler',
    $status >= 400 => 'Anfragefehler',
    default        => 'in Ordnung',
};

// PHP 8.0: nullsafe оператор
$land = $bestellung?->kunde?->adresse?->land;
```

PHP 8.1 донесе Enums, т.е. изброими типове с фиксирани стойности, и readonly свойства, които могат да бъдат зададени само веднъж:

```php
<?php
enum Rolle: string {
    case Leser = 'leser';
    case Redakteur = 'redakteur';
    case Admin = 'admin';
}

final class Benutzer {
    public function __construct(
        public readonly string $name,
        public readonly Rolle $rolle,
    ) {}
}

$b = new Benutzer('Erika', Rolle::from('redakteur'));
```

`Rolle::from()` хвърля грешка при неизвестни стойности. Това не позволява произволни низове от формуляри да се промъкнат като роля. Който вместо грешка се нуждае от празна стойност, ползва `Rolle::tryFrom()`, която при неизвестни стойности връща `null`.

Нови в 8.1 са и Fibers, основа за конкурентни процеси, върху която се градят библиотеки за асинхронна обработка. При нормалната експлоатация на уебсайтове от това се забелязва малко, а в съвременните framework-ове и опашки повече.

## PHP 8.2 и 8.3: подреждане и укрепване

PHP 8.2 оттегли динамичните свойства. Който присвои на обект недекларирано свойство, получава съобщение; с `#[\AllowDynamicProperties]` това може да се разреши за отделни класове. По-старите добавки затова често генерират много съобщения в дневника.

За сигурността са интересни новото разширение Random, чийто стандартен randomizer според страницата за издание ползва криптографски сигурен генератор на случайни числа, и атрибутът `#[\SensitiveParameter]`, който скрива стойности като пароли в stack trace. Повече за сигурните случайни стойности в [Сигурни случайни числа и токени в PHP](https://phpsos.de/bg/blog/sichere-tokens-php/).

PHP 8.3 добави типизирани константи на класове, атрибута `#[\Override]` срещу правописни грешки при презаписване на методи и `json_validate()`, която проверява JSON, без да го декодира изцяло.

## PHP 8.4 и 8.5: съвременни езикови средства

PHP 8.4 въведе Property Hooks, т.е. логика директно върху свойствата, и асиметрична видимост като `public private(set)`. Към тях се добавиха нов DOM API с поддръжка на HTML5 и функции като `array_find()`, `array_any()` и `array_all()`. Според страницата за издание разширенията IMAP, OCI8, PDO_OCI и pspell са преместени от ядрото към PECL. Приложенията, които ползват например IMAP, тогава се нуждаят от отделен пакет.

PHP 8.5 донесе pipe оператора, който свързва извикванията отляво надясно:

```php
<?php
$slug = '  Neue Produkte 2026  '
    |> trim(...)
    |> strtolower(...)
    |> (fn(string $s): string => str_replace(' ', '-', $s));
// Резултат: "neue-produkte-2026"
```

Ново е и URI разширение, което разчленява адреси според RFC 3986 и стандарта WHATWG URL. Това е важно за сигурността, защото неединно разчленените URL адреси са позната причина за заобиколени проверки. Операторът с обратни кавички като кратка форма на `shell_exec()` е оттеглен, настройката `disable_classes` е премахната. Който я е ползвал, трябва да адаптира заздравяването си.

## Новости, надграждане и PHP2Shell

Новите езикови функции не затварят уязвимости в интерпретатора. Срещу PHP2Shell помага само актуалното състояние на корекциите на съответния клон: 8.5.12, 8.4.27, 8.3.36 или 8.2.35. За PHP 8.1 и 8.0 вече няма официални актуализации. Който е останал там, трябва да надгради и при това новостите помагат малко, а несъвместимостите много.

Сигурен път за надграждане в пет стъпки:

1. Определете целевата версия, съобразена със системните изисквания на производителя и с [цикъла на издаване](https://phpsos.de/bg/php/release-zyklus/).
2. Приведете зависимостите чрез Composer и добавките към съвместими състояния.
3. Проверете кода със статичен анализ и тестове спрямо целевата версия.
4. Изпробвайте в тестова среда с копие на производствени данни и анализирайте дневниците за оттегляния.
5. Преминете, рестартирайте всички PHP процеси и документирайте състоянието.

Предистория за типовете дава [Типовата система на PHP](https://phpsos.de/bg/php/typsystem/).

## Как помага PHP SOS конкретно?

- **Проверка на съвместимостта:** Анализираме Вашия код и разширения за несъвместимости с целевата версия.
- **Извършване на надграждането:** С [миграцията към поддържана версия на PHP](https://phpsos.de/bg/leistungen/php-migration-legacy/) надграждаме приложенията, тествани.
- **Адаптиране на заздравяването:** Заменяме премахнатите настройки като `disable_classes` с действащи алтернативи.
- **Поддържане на състоянието на корекциите:** След надграждането поддържаме клона актуален и доказваме всяко рестартиране.


## Често задавани въпроси

**Коя версия на PHP 8 да използвам днес?**  
За нови проекти PHP 8.4 или 8.5, защото те се поддържат най-дълго: 8.4 до края на 2028 г., 8.5 до края на 2029 г. Решаващо е какво поддържа Вашето приложение според системните изисквания на производителя. PHP 8.2 приключва на 31 декември 2026 г.

**Какво се чупи най-често при преминаване от PHP 7.4 към PHP 8?**  
Често това са по-строгите проверки на типовете: вътрешните функции в PHP 8 хвърлят TypeError или ValueError, вместо само да извеждат предупреждения. Забелязват се и променените сравнения между числа и низове. Статичният анализ и тестовете разкриват повечето предварително.

**Прави ли JIT моя уебсайт по-бърз?**  
Най-често почти не. Според страницата за издание на PHP 8.0 производителността на типичните уеб приложения е приблизително на нивото на PHP 7.4, докато изчислително интензивни задачи могат значително да спечелят. От PHP 8.4 JIT е изключен по подразбиране.

**Кои новости помагат на сигурността?**  
Между другото новото разширение Random в PHP 8.2 с криптографски сигурен стандарт, атрибутът SensitiveParameter срещу пароли в stack trace, Enums и readonly свойства за по-еднозначни данни, както и по-последователните грешки на типовете от PHP 8.0.

## Източници

- [php.net: Издание PHP 8.0](https://www.php.net/releases/8.0/en.php)
- [php.net: Издание PHP 8.4](https://www.php.net/releases/8.4/en.php)
- [php.net: Издание PHP 8.5](https://www.php.net/releases/8.5/en.php)
- [PHP 8 ChangeLog](https://www.php.net/ChangeLog-8.php)
- [php.net: Поддържани версии](https://www.php.net/supported-versions.php)
