Pereiti prie turinio
← Visos PrestaShop 9 klaidos

PrestaShop 9 klaidos

Call to undefined function each() perkeliant PrestaShop į PHP 8

PrestaShop 9 reikia PHP 8.1 ar naujesnės, o PHP 8 pašalino each(), create_function() ir kitas senas funkcijas. PHP 5 ar 7 laikais rašyti moduliai sustoja su fatalia klaida.

Klaida
Call to undefined function each()
Pašalinta
PHP 8.0
Dažniausiai randama
Seni moduliai, temos, override failai

Kas nutiko

PrestaShop 9 veikia su PHP 8.1–8.4 (9.1 ir su 8.5). Parduotuvė, ateinanti iš PrestaShop 1.7, dažnai veikė su PHP 7.x, todėl atnaujinant keičiasi ir pagrindinė PHP versija. PHP 8.0 pašalino funkcijas, kurios metų metus buvo pažymėtos kaip pasenusios. Dažniausios PrestaShop moduliuose:

  • each() – masyvams pereiti
  • create_function() – mažoms atgalinio kvietimo funkcijoms kurti
  • money_format() – kainoms formatuoti
  • get_magic_quotes_gpc() – senuose įvesties filtruose

Kiekviena jų dabar baigiasi Call to undefined function ...(). PHP 8 griežtesnis ir kitur: pavyzdžiui, count() ar strlen(), gavusios netinkamą tipą, meta klaidą, o ne įspėjimą, o implode() nebepriima argumentų atvirkštine tvarka.

Sprendimas

Pakeitimai paprasti:

// each()
// Buvo
while (list($key, $value) = each($array)) { ... }
// Dabar
foreach ($array as $key => $value) { ... }

// create_function()
// Buvo
usort($items, create_function('$a, $b', 'return $a["position"] - $b["position"];'));
// Dabar
usort($items, function ($a, $b) { return $a['position'] - $b['position']; });

// money_format(): vietoj jos – PrestaShop lokalė
$formatted = Context::getContext()->getCurrentLocale()->formatPrice($amount, $isoCode);

get_magic_quotes_gpc() PHP 7.4 visada grąžindavo false, todėl patikrinimą aplink ją galima tiesiog pašalinti, paliekant „false“ šaką.

Kur dar slepiasi

grep -rnw "each\|create_function\|money_format\|get_magic_quotes_gpc" --include=*.php modules/ themes/ override/

Ši paieška randa vardus – kiekvieną radinį patikrinkite, nes kolekcijos objekto metodas each() yra tvarkoje. Pilna PHP 8 patikra yra mūsų nemokamoje parengties patikroje žemiau, kartu su PrestaShop pakeitimais.

Raskite visas tokias vietas prieš atnaujindami

Kur yra vienas pašalintas kvietimas, paprastai yra ir daugiau. Mūsų nemokama PrestaShop 9 parengties patikra perskaito visų modulių, temos ir override failų kodą ir parodo kiekvieną problemą su failu ir eilute. Ji tik skaito, nieko nekeičia.

Gauti nemokamą patikrą

Nenorite taisyti patys? Parduotuves į PrestaShop 9 atnaujiname už fiksuotą kainą. Apie atnaujinimą