Fast PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable 

Ett PHP-fel som förekommer hos många WordPress Plugins som inte har uppdaterats på länge eller är inkompatibla med nyare versioner av PHP. PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable.

I vårt scenario inträffade PHP-felet i en modul Cross Sell Product Display för 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

Varför felet uppstår PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable ?

Problemet som genererar detta PHP-fel är funktionen sizeof() som i versionen av PHP 7.2 eller senare versioner kan generera detta fel, om den givna parametern inte är en array eller ett objekt som implementerar gränssnittet Countable.

Därför uppstår felet ofta efter en uppdatering av PHP-versionen.

Hur man löser PHP-fel som genereras av sizeof()?

Den enklaste metoden är att ersätta funktionsanropet sizeof() med ett funktionsanrop count().

När det gäller de som använder gamla versioner av modulen Cross Sell Product Display, lösningen är enkel. Funktionerna från 18-tumslinjen kommer att ersättas 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;
	
}

Ovanstående kod som den är i sizeof() kommer att ersättas av:

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;
	
}

Denna ändring kontrollerar först om $crosssells är en array använder funktionen is_array() och i annat fall återvänder false.

I fall att $crosssells är en array, används funktionen count() för att bestämma antalet element i array. Om antalet element är noll eller $crosssells är en tom sträng, returneras false.

Lämna kommentarer om det finns några förtydliganden eller tillägg till denna handledning.

Brinner för teknik, skriver jag med glädje på StealthSettings.com sedan 2006. Jag har lång erfarenhet av operativsystem: macOS, Windows şi Linux, men också i programmeringsspråk och bloggplattformar (WordPress) och för nätbutiker (WooCommerce, Magento, PrestaShop).

Hur man » WordPress » Fast PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable 
Lämna en kommentar