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 pereiticreate_function()– mažoms atgalinio kvietimo funkcijoms kurtimoney_format()– kainoms formatuotiget_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.