Přechod na php 7

Koho by nezlákaly k přechodu na php 7 výsledky testů výkonu php aplikací? Například WordPress se zdá být jednou tak rychlejší. Přechod z php 5 na php 7 je ale trochu složitější, než by se mohlo na první pohled zdát. Je zde pár záludností, které nejsou zpětně kompatibilní. Vyskytují-li se například ve vašich skriptech POSIX funkce (např. ereg(), ereg_replace() apod.), mohou vás potrápit asi ze všech změn nejvíce.

 

 

Jaké jsou zásadní změny?

  1. je nutné přejít z myslq na mysqli nebo pdo
  2. POSIX funkce je potřeba nahradit funkcemi PCRE (Perl Compatible Regular Expression)
  3. switch může obsahovat pouze jedenkrát default
  4. při dělení nulou již není vráceno false, nýbrž to vyhodí DivisionByZeroError
  5. nelze již používat asp tagy <% případně <%= (musí se používat standardní otevírací tag <?php )
  6. … a řada další změn (více viz. manuál: migrace na php 7 )

ad 2.

ereg_replace()
ereg()
eregi_replace()
eregi()
split()
spliti()
sql_regcase()

Více viz. PHP Regular Expressions

 

Regulární výrazy je nutné při přechodu z POSIX na PCRE trochu pozměnit. Tak např. u funkce eregi, tedy hledání shody pomocí regulárního výrazu s nastavením case insensitive (íčko na konci) stačí ereg přepsat na preg, přidat / na začátek a na konec a insensitive nastavit pomocí íčka na konci v regulárním výrazu:

nahradit tímto kódem

 

Existence preg však nezaručuje, že bude příkaz automaticky kompatibilní s php 7. Narazil jsem například na situaci, kdy se objevil warning u následujícího příkazu:

Warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead.

Řešením zde bylo přepsat preg_replace() funkcí preg_replace_callback() :

 

 

 

Přechodu na php 7 se v budoucnu nevyhnete. Není to ale tak horké, jak by se mohlo zdát. Převáděl jsem například i nejstarší eshop, který jsem napsal někdy kolem roku 2004 a byla to práce ani ne na hodinu. Zas tak moc se toho od té doby nezměnilo. Pokud píšete co nejjednodušší kód bez zbytečně komplikovaných vychytávek, je velká šance, že přechod na sedmičku bude téměř bezbolestný.