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

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

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.

Teknologientusiast, jeg skriver med glæde på StealthSettings.com siden 2006. Jeg har rig erfaring med operativsystemer: macOS, Windows og Linux, samt programmeringssprog og blogplatforme (WordPress) og til onlinebutikker (WooCommerce, Magento, PrestaShop).

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