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

PHP pogreška koja se pojavljuje u mnogim WordPress Plugins koji dugo nisu ažurirani ili su nekompatibilni s novijim verzijama PHP-a. PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable.

U našem scenariju, PHP pogreška se dogodila u modulu Cross Sell Product Display za 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

Zašto dolazi do greške PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable ?

Problem koji generira ovu PHP pogrešku je funkcija sizeof() koji u verziji PHP 7.2 ili novijim verzijama može generirati ovu pogrešku, ako navedeni parametar nije jedan array ili objekt koji implementira sučelje Countable.

Stoga se pogreška često pojavljuje nakon ažuriranja PHP verzije.

Kako riješiti PHP pogreške koje generira sizeof()?

Najjednostavnija metoda je zamijeniti poziv funkcije sizeof() s pozivom funkcije count().

U slučaju onih koji koriste stare verzije modula Cross Sell Product Display, rješenje je jednostavno. Funkcije iz linije od 18 inča bit će zamijenjene 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;
	
}

Gornji kod u kojem je sizeof() bit će zamijenjen sa:

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

Ova izmjena najprije provjerava je li $crosssells je array koristeći funkciju is_array() a, inače, vraća se false.

U slučaju $crosssells je array, koristi se funkcija count() odrediti broj elemenata u array. Ako je broj elemenata nula ili $crosssells je prazan niz, vraća se false.

Ostavite komentare ako postoje pojašnjenja ili dodaci ovom vodiču.

Strastveni zaljubljenik u tehnologiju, s veseljem pišem na StealthSettings.com od 2006. godine. Imam bogato iskustvo s operativnim sustavima: macOS, Windows i Linux, kao i s programskim jezicima i platformama za bloganje (WordPress) i za internetske trgovine (WooCommerce, Magento, PrestaShop).

Ostavite komentar