En PHP-fejl, der optræder i mange WordPress Plugins som ikke er blevet opdateret i lang tid eller er inkompatible med nyere versioner af PHP. PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable.
I vores scenarie opstod PHP-fejlen i et modul Cross Sell Product Display for 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
Indhold
Hvorfor fejlen opstår PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable ?
Problemet, der genererer denne PHP-fejl, er funktionen sizeof()
som i versionen af PHP 7.2 eller nyere versioner, kan generere denne fejl, hvis den givne parameter ikke er en array eller et objekt, der implementerer grænsefladen Countable.
Derfor opstår fejlen ofte efter en opdatering af PHP-versionen.
Sådan løser du PHP-fejl genereret af sizeof()
?
Den enkleste metode er at erstatte funktionskaldet sizeof()
med et funktionskald count()
.
I tilfælde af dem, der bruger gamle versioner af modulet Cross Sell Product Display, løsningen er enkel. Funktionerne fra 18 tommer linjen vil blive udskiftet 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;
}
Ovenstående kode, hvori det er sizeof() vil blive erstattet af:
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;
}
Denne ændring kontrollerer først, om $crosssells
er en array ved hjælp af funktionen is_array()
og ellers vender tilbage false.
I tilfælde af $crosssells
er en array, bruges funktionen count()
at bestemme antallet af elementer i array. Hvis antallet af elementer er nul eller $crosssells
er en tom streng, returneres falsk.
Efterlad kommentarer, hvis der er nogen forklaringer eller tilføjelser til denne tutorial.