Logotip HuTor Tech HuTor Tech
← Svi članci

· hutor.tech

Kako prijeći s PHP-a 7 na PHP 8

Kako prijeći s PHP-a 7 na PHP 8

Migracija na PHP 8 rijetko je dramatična, ali nikad nije automatska. Veći dio posla je pronaći ono nekoliko mjesta gdje je jezik prestao opraštati aljkav kod, a ostatak je provjera da su ovisnosti pošle s vama.

Počnite ovisnostima, ne vlastitim kodom. Pokrenite `composer why-not php 8.2` (ili verziju koju ciljate) i dobit ćete popis paketa koji blokiraju nadogradnju. Nadogradite ih prve, još na PHP-u 7, zasebnim commitovima. Migraciju koja istovremeno mijenja izvršno okruženje i dvadeset paketa nemoguće je raščlaniti kad nešto pukne.

Zatim pustite statičku analizu da nađe stvarne nekompatibilnosti. PHPCompatibility za PHP_CodeSniffer ili Rector sa skupovima pravila za PHP 8 pokazat će obrasce koji su se promijenili:
— `match` i `enum` postali su rezervirane riječi;
— usporedba stringa i broja slijedi razumnija pravila, pa je `0 == "foo"` sada netočno;
— predavanje null vrijednosti parametrima ugrađenih funkcija koji je ne primaju označeno je zastarjelim;
— `create_function`, `each` i obitelj `mysql_*` nestali su zauvijek;
— mnoge obavijesti postale su upozorenja, a upozorenja greške.

Upravo promjena usporedbe grize u produkciji. Kod koji se tiho oslanjao na to da `"abc" == 0` vrijedi sada će krenuti drugom granom, a nikakva se greška neće pojaviti. Pregledajte labave usporedbe oko korisničkog unosa, identifikatora i statusnih kodova i dopišite testove prije promjene okruženja, a ne poslije.

Prebacujte na testnom serveru koji zrcali produkciju: ista proširenja, iste postavke PHP-FPM bazena, ista konfiguracija OPcachea. Uključite prijavu grešaka, prođite aplikaciju i čitajte log, a ne zaslon — većina problema s PHP-om 8 stiže kao zastarjela upozorenja davno prije nego što stigne kao pad.

Kad ste na 8.x, posvetite dan skupljanju dobitaka: promocija svojstava u konstruktoru, imenovani argumenti, `match`, operator `?->` i, još važnije, osjetno brži engine i bez JIT-a. Nemojte pisati sve iznova — novu sintaksu primijenite ondje gdje se koda ionako dotičete, inače će se migracija pretvoriti u prepisivanje i izgubit ćete mogućnost povratka.

Plan povratka držite do kraja prvog mirnog tjedna: prethodna verzija PHP-a instalirana uz novu, mogućnost da bazen vratite na nju i baza koja nije promijenjena tako da je stari kod više ne može pročitati.