Logo HuTor Tech HuTor Tech
← Všetky články

· hutor.tech

Ako prejsť z PHP 7 na PHP 8

Ako prejsť z PHP 7 na PHP 8

Migrácia na PHP 8 býva zriedka dramatická, ale nikdy nie je automatická. Väčšina práce spočíva v nájdení hŕstky miest, kde jazyk prestal odpúšťať nedbalý kód, a zvyšok je overenie, že závislosti šli s vami.

Začnite závislosťami, nie vlastným kódom. Spustite `composer why-not php 8.2` (alebo verziu, na ktorú mierite) a dostanete zoznam balíkov, ktoré aktualizáciu blokujú. Aktualizujte ich ako prvé, ešte na PHP 7, samostatnými commitmi. Migráciu, ktorá naraz mení běhové prostredie a dvadsať balíkov, sa pri poruche nedá rozobrať.

Potom nechajte skutočné nekompatibility nájsť statickú analýzu. PHPCompatibility pre PHP_CodeSniffer alebo Rector so sadami pravidiel pre PHP 8 ukážu na zmenené vzory:
— `match` a `enum` sa stali vyhradenými slovami;
— porovnanie reťazca s číslom sa riadi rozumnejšími pravidlami, takže `0 == "foo"` je teraz nepravda;
— odovzdávanie null do nenullovateľných parametrov vstavaných funkcií je zastarané;
— `create_function`, `each` a rodina `mysql_*` sú definitívne preč;
— mnohé notice sa stali warning a warning chybami.

Práve zmena porovnávania štípe v produkcii. Kód, ktorý sa ticho spoliehal na to, že `"abc" == 0` platí, pôjde teraz inou vetvou a žiadna chyba sa neobjaví. Prejdite voľné porovnania okolo používateľského vstupu, identifikátorov a stavových kódov a testy dopíšte pred zmenou behového prostredia, nie po nej.

Prepínajte na testovacom serveri, ktorý zrkadlí produkciu: rovnaké rozšírenia, rovnaké nastavenia poolu PHP-FPM, rovnaká konfigurácia OPcache. Zapnite hlásenie chýb, prejdite aplikáciu a čítajte log, nie obrazovku — väčšina problémov PHP 8 prichádza ako zastarané upozornenia dávno predtým, než príde ako pád.

Keď už ste na 8.x, venujte deň zberu výhod: promócia vlastností v konštruktore, pomenované argumenty, `match`, operátor `?->` a hlavne citeľne rýchlejší engine aj bez JIT. Neprepisujte všetko — novú syntax použite tam, kde sa kódu aj tak dotýkate, inak sa z migrácie stane prepis a stratíte možnosť vrátiť sa späť.

Plán návratu si nechajte do konca prvého pokojného týždňa: predchádzajúca verzia PHP nainštalovaná vedľa, možnosť prepnúť pool naspäť a databáza, ktorá sa nezmenila tak, aby ju starý kód už neprečítal.