PHP-virhe, joka näkyy monissa WordPress Plugins joita ei ole päivitetty pitkään aikaan tai jotka eivät ole yhteensopivia uudempien PHP-versioiden kanssa. PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable.
Meidän skenaariossamme PHP-virhe tapahtui moduulissa Cross Sell Product Display varten WooCommerce.
FastCGI sent in stderr: "PHP message: PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable in /web/path/public_html/wp-content/plugins/cross-sell-product-display-for-woocommerce/templates.php on line 18
Sisältö
Miksi virhe ilmenee PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable ?
Tämän PHP-virheen aiheuttava ongelma on funktio sizeof()
joka PHP 7.2:n tai uudemmissa versioissa voi aiheuttaa tämän virheen, jos annettu parametri ei ole yksi array tai objekti, joka toteuttaa rajapinnan Countable.
Siksi virhe ilmenee usein PHP-version päivityksen jälkeen.
Kuinka ratkaista PHP-virheet, jotka ovat luoneet sizeof()
?
Yksinkertaisin tapa on korvata funktiokutsu sizeof()
toimintokutsulla count()
.
Niiden, jotka käyttävät moduulin vanhoja versioita Cross Sell Product Display, ratkaisu on yksinkertainen. 18 tuuman linjan toiminnot korvataan templates.php.
function cdxfreewoocross_get_cross_sell_products($product_id=false){
if($product_id ===false ){
if(!is_product()){return false;}
$product_id = (int)get_the_ID();
if($product_id=='0'){return false;}
}
$crosssells = get_post_meta( $product_id, '_crosssell_ids',true);
if ( sizeof($crosssells ) == 0 || $crosssells =='') { return false; }
return $crosssells;
}
Yllä oleva koodi, jossa se on sizeof() korvataan seuraavalla:
function cdxfreewoocross_get_cross_sell_products($product_id=false){
if($product_id ===false ){
if(!is_product()){return false;}
$product_id = (int)get_the_ID();
if($product_id=='0'){return false;}
}
$crosssells = get_post_meta( $product_id, '_crosssell_ids',true);
if ( !is_array( $crosssells ) || count( $crosssells ) == 0 || $crosssells =='') { return false; }
return $crosssells;
}
Tämä muutos tarkistaa ensin, jos $crosssells
on array funktiota käyttämällä is_array()
ja muuten palaa false.
Siinä tapauksessa $crosssells
on array, toimintoa käytetään count()
määrittääksesi elementtien lukumäärän array. Jos elementtien lukumäärä on nolla tai $crosssells
on tyhjä merkkijono, palautetaan false.
Jätä kommentit, jos tähän opetusohjelmaan on selvennyksiä tai lisäyksiä.