Opravte varovanie PHP: sizeof (): Parameter musí byť pole alebo objekt, ktorý implementuje spočítateľné

Chyba PHP, ktorá sa objaví v mnohých WordPress Plugins ktoré neboli aktualizované po dlhú dobu alebo sú nezlučiteľné s novšími verziami PHP. VAROVANIE PHP: Sizeof (): Parameter musí byť pole alebo objekt, ktorý implementuje spočítateľné.

V našom scenári sa chyba PHP objavila 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

De Ce Apare eroarea PHP Varovanie: sizeof (): Parameter musí byť pole alebo objekt, ktorý implementuje spočítateľný?

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

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

Ako riešite chyby PHP generované pomocou sizeof()?

Najjednoduchšou metódou je nahradiť hovor do funkcie sizeof() s volaním do funkcie count().

V prípade tých, ktorí používajú staré verzie modulu Cross Sell Product Display, riešenie je jednoduché. Funkcie z riadku 18 sa vymenia 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 sa veľkosť () bude nahradiť:

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 zmena najskôr skontroluje, či $crosssells Je to a array pomocou funkcie is_array() A inak sa vracia false.

Či $crosssells Je to a array, funkcia sa používa count() určiť počet položiek v array. Ak je počet položiek nula alebo $crosssells Je to vákuový reťazec, vracia sa nepravdivo.

Zanechajte pripomienky, ak sa majú objasniť alebo dokončiť tento návod.

Vášnivý pre technológiu píšem s potešením na serveri Stealthsetts.com, počnúc rokom 2006. Mám bohaté skúsenosti v operačných systémoch: MacOS, Windows a Linux, ale aj v programovacích jazykoch a platformách blogov (WordPress) a pre internetové obchody (WooCommerce, Magento, Presashop).

Domov Váš zdroj IT návodov, užitočné tipy a správy. Opravte varovanie PHP: sizeof (): Parameter musí byť pole alebo objekt, ktorý implementuje spočítateľné
Zanechajte komentár