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

Chyba PHP, která se objevuje v mnoha WordPress Plugins které nebyly dlouho aktualizovány nebo jsou nekompatibilní s novějšími verzemi PHP. PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable.

V našem scénáři došlo k chybě PHP v modulu Cross Sell Product Display pro 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

Proč k chybě dochází PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable ?

Problém, který generuje tuto chybu PHP, je funkce sizeof() který ve verzi PHP 7.2 nebo novějších může tuto chybu generovat, pokud zadaný parametr není jedna array nebo objekt, který implementuje rozhraní Countable.

Chyba se proto často objevuje po aktualizaci verze PHP.

Jak vyřešit chyby PHP generované sizeof()?

Nejjednodušší metodou je nahrazení volání funkce sizeof() s voláním funkce count().

V případě těch, kteří používají staré verze modulu Cross Sell Product Display, řešení je jednoduché. Budou nahrazeny funkce z řady 18 palců 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;
	
}

Výše uvedený kód, ve kterém je sizeof() bude nahrazeno:

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

Tato úprava nejprve zkontroluje, zda $crosssells je array pomocí funkce is_array() a jinak se vrátí false.

V případě $crosssells je array, funkce se používá count() určit počet prvků v array. Pokud je počet prvků nula resp $crosssells je prázdný řetězec, vrátí se false.

Zanechte komentáře, pokud existují nějaká vysvětlení nebo dodatky k tomuto tutoriálu.

Věnovaný technologiím, s radostí píši na StealthSettings.com od roku 2006. Mám bohaté zkušenosti s operačními systémy: macOS, Windows a Linux, stejně jako s programovacími jazyky a platformami pro blogování (WordPress) a pro online obchody (WooCommerce, Magento, PrestaShop).

jak na to » WordPress » Opravit PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable 
Zanechat komentář