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

En PHP-feil som dukker opp i mange WordPress Plugins som ikke har blitt oppdatert på lenge eller er inkompatible med nyere versjoner av PHP. PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable.

I vårt scenario oppsto PHP-feilen i en 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

Hvorfor feilen oppstår PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable ?

Problemet som genererer denne PHP-feilen er funksjonen sizeof() som i versjonen av PHP 7.2 eller nyere versjoner, kan generere denne feilen, hvis den gitte parameteren ikke er én array eller et objekt som implementerer grensesnittet Countable.

Derfor dukker feilen ofte opp etter en oppdatering av PHP-versjonen.

Hvordan løse PHP-feil generert av sizeof()?

Den enkleste metoden er å erstatte funksjonskallet sizeof() med et funksjonskall count().

Når det gjelder de som bruker gamle versjoner av modulen Cross Sell Product Display, løsningen er enkel. Funksjonene fra 18 tommers linjen vil bli erstattet 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;
	
}

Koden ovenfor der den er sizeof() vil bli erstattet 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;
	
}

Denne modifikasjonen sjekker først om $crosssells er en array ved å bruke funksjonen is_array() og ellers returnerer false.

I tilfelle $crosssells er en array, brukes funksjonen count() for å bestemme antall elementer i array. Hvis antall elementer er null eller $crosssells er en tom streng, returneres false.

Legg igjen kommentarer hvis det er noen avklaringer eller tillegg til denne opplæringen.

Teknologiinteressert, jeg skriver med glede på StealthSettings.com siden 2006. Jeg har bred erfaring med operativsystemer: macOS, Windows og Linux, samt programmeringsspråk og bloggplattformer (WordPress) og for nettbutikker (WooCommerce, Magento, PrestaShop).

Hvordan » WordPress » Fix PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable 
Legg igjen en kommentar