Застарілі (deprecated) можливості ще працюють, але видають попередження й будуть прибрані в наступній мажорній версії. Найпоширеніші в реальному коді:
Динамічні властивості (PHP 8.2):
$user = new User();
$user->temporaryFlag = true; // Deprecated: Creation of dynamic property
Оголосіть властивість явно. Для класів, яким це справді потрібно, - #[\AllowDynamicProperties]. stdClass і класи з __get/__set не зачіпаються.
Інтерполяція ${var} у рядках (8.2):
"Привіт, ${name}"; // застаріло
"Привіт, {$name}"; // правильно
Неявно nullable параметри (8.4):
function find(Criteria $criteria = null) {} // застаріло
function find(?Criteria $criteria = null) {} // правильно
null у параметрах вбудованих функцій, що не приймають null (8.1):
strlen(null); // Deprecated
trim($request->input('name')); // якщо поле відсутнє - null
trim($request->input('name') ?? '');
Інше:
utf8_encode()/utf8_decode()(8.2) →mb_convert_encoding().- Часткова підтримка callable-рядків на кшталт
"self::method"(8.2). - Неявне приведення
floatз дробовою частиною доintу ключах і операціях (8.1). E_STRICTяк константа (8.4).
Як знайти все одразу:
error_reporting(E_ALL)у тестах і перетворення deprecation на помилки тестів.- Laravel пише застарілі в окремий канал логів (
LOG_DEPRECATIONS_CHANNEL) - увімкнути його на стейджингу й подивитися, що сиплеться під реальним трафіком. - Rector автоматично виправляє більшість із цього списку.
Чим раніше прибрати застаріле, тим дешевше наступне оновлення PHP.