PHP-дің өзін жаңарту қиын емес. Қиыны — одан кейін ескі нұсқаларға жазылған код істемей қалады: өз пысықтауларыңыз, сатып алынған модульдер, шаблондар. Төменде біз жиі түзететін қателер — өз көшірулерімізден алынған мысалдармен.
01
Статикалық шақырудағы статикалық емес әдістер
Оқиға өңдеушілері мен класс әдістері static сөзінсіз жарияланған, бірақ статикалық түрде шақырылады. PHP 8-де бұл — фаталды қате.
function OnBuildGlobalMenu()
static function OnBuildGlobalMenu()
Тәжірибеден: бір интернет-дүкенде осындай бір ғана өңдеуші кесірінен әкімшілік панель ашылмады, ал бонус агенттері 2023 жылдың қазанынан бері үнсіз істемей келген.
02
Жол символына фигуралық жақшамен қол жеткізу
$str{0} синтаксисі PHP 8.0-де алынып тасталды. Мұндай жолы бар файл толығымен жүктелмейді — ішінде жарияланғанның бәрімен бірге.
$path{$len-1}
$path[$len-1]
Тәжірибеден: төлем модулінде осындай бір жол кесірінен картамен төлеу формасы істен шықты — сатып алушы соңғы қадамда қате көрді.
03
null мен қате типтерді беру
count(), in_array() және жол функциялары енді null мәнін және жол күтілетін жердегі массивтерді кешірмейді. Ескерту қатеге айналды.
count($arResult["ITEMS"])
count($arResult["ITEMS"] ?? [])
Қай жерде кездеседі: компонент шаблондары, result_modifier.php, форма өңдеушілері.
04
Алынып тасталған функциялар мен ескі синтаксис
each(), create_function(), implode() аргументтерінің кері реті және жылдар бойы ескерту беріп келген басқа да нәрселер PHP 8-де алынып тасталды.
while (list($k, $v) = each($arr))
foreach ($arr as $k => $v)
Қай жерде кездеседі: PHP 5 заманынан қалған ескі модульдер мен пысықтаулар.
05
Кодталған модульдер
ionCube арқылы қорғалған модульдер авторы қай PHP нұсқаларына кодтаса, тек соларда ғана жұмыс істейді. Мұндай кодты түзету мүмкін емес — әзірлеушіден жаңа нұсқа немесе балама қажет.
Тәжірибеден: сынақ ауыстыру кезінде дүкеннің сүзгі модулі жүктелмей қойды — мұны жұмыс сайтынан емес, көшірмеден таптық.
06
Крон, консоль және кеңейтімдер
Сайт жаңа PHP-де жұмыс істейді, ал кесте бойынша тапсырмалар консольден ескі нұсқада іске қосылады. Немесе жаңа нұсқада қажетті кеңейтімдер қосылмаған: mysqli, mbstring, gd.
Тәжірибеден: бір дүкеннің сайты PHP 8.2-де жұмыс істеді, ал 1С-Битрикстің барлық крон тапсырмалары 7.4-те іске қосылып, құлап жатты — агенттер мен таратылымдар тоқтап тұрды.