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

Chyba PHP, ktorá sa objavuje v mnohých WordPress Plugins ktoré neboli dlho aktualizované alebo sú nekompatibilné s novšími verziami PHP. PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable.

V našom scenári sa chyba PHP vyskytla v module Cross Sell Product Display pre 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

Prečo sa chyba vyskytuje PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable ?

Problém, ktorý generuje túto chybu PHP, je funkcia sizeof() ktorý vo verzii PHP 7.2 alebo novších verziách môže generovať túto chybu, ak daný parameter nie je jeden array alebo objekt, ktorý implementuje rozhranie Countable.

Preto sa chyba často objavuje po aktualizácii verzie PHP.

Ako vyriešiť chyby PHP generované sizeof()?

Najjednoduchším spôsobom je nahradiť volanie funkcie sizeof() s volaním funkcie count().

V prípade tých, ktorí používajú staré verzie modulu Cross Sell Product Display, riesenie je jednoduche. Nahradené budú funkcie z radu 18 palcov 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;
	
}

Vyššie uvedený kód, v ktorom je sizeof() bude nahradený:

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

Táto úprava najskôr skontroluje, či $crosssells je array pomocou funkcie is_array() a v opačnom prípade sa vráti false.

V prípade $crosssells je array, funkcia sa používa count() určiť počet prvkov v array. Ak je počet prvkov nulový resp $crosssells je prázdny reťazec, vráti sa false.

Zanechajte komentáre, ak existujú nejaké vysvetlenia alebo dodatky k tomuto návodu.

Zanietený technológiou, s radosťou píšem na StealthSettings.com od roku 2006. Mám bohaté skúsenosti s operačnými systémami: macOS, Windows a Linux, ako aj s programovacími jazykmi a platformami pre blogovanie (WordPress) a pre online obchody (WooCommerce, Magento, PrestaShop).

Ako » WordPress » Opraviť PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable 
Pridať komentár