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

Une erreur PHP qui apparaît dans de nombreux WordPress Plugins qui n'ont pas été mis à jour depuis longtemps ou qui sont incompatibles avec les nouvelles versions de PHP. PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable.

Dans notre scénario, l'erreur PHP s'est produite dans un module Cross Sell Product Display pour 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

Pourquoi l'erreur se produit PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable ?

Le problème qui génère cette erreur PHP est la fonction sizeof() qui dans la version de PHP 7.2 ou versions ultérieures, peut générer cette erreur, si le paramètre donné n'en est pas un array ou un objet qui implémente l'interface Countable.

Par conséquent, l'erreur apparaît souvent après une mise à jour de la version PHP.

Comment résoudre les erreurs PHP générées par sizeof()?

La méthode la plus simple consiste à remplacer l'appel de fonction sizeof() avec un appel de fonction count().

Dans le cas de ceux qui utilisent les anciennes versions du module Cross Sell Product Display, la solution est simple. Les fonctions de la gamme 18 pouces seront remplacées 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;
	
}

Le code ci-dessus dans lequel il est sizeof() sera remplacé par :

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

Cette modification vérifie d'abord si $crosssells est un array en utilisant la fonction is_array() et, sinon, renvoie false.

En cas de $crosssells est un array, la fonction est utilisée count() pour déterminer le nombre d'éléments dans array. Si le nombre d'éléments est nul ou $crosssells est une chaîne vide, false est renvoyé.

Laissez des commentaires s'il y a des clarifications ou des ajouts à ce tutoriel.

Passionné par la technologie, j'écris avec plaisir sur StealthSettings.com depuis 2006. J'ai une expérience approfondie dans les systèmes d'exploitation : macOS, Windows et Linux, ainsi que dans les langages de programmation et les plates-formes de blogging (WordPress) et pour les boutiques en ligne (WooCommerce, Magento, PrestaShop).

Comment » WordPress » Fixer PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable 
Laisser un commentaire