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

Napaka PHP, ki se pojavlja v mnogih WordPress Plugins ki že dolgo niso bili posodobljeni ali niso združljivi z novejšimi različicami PHP. PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable.

V našem scenariju je do napake PHP prišlo v 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

Zakaj pride do napake PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable ?

Težava, ki povzroči to napako PHP, je funkcija sizeof() ki v različici PHP 7.2 ali novejših različicah lahko ustvari to napako, če podani parameter ni en array ali objekt, ki implementira vmesnik Countable.

Zato se napaka pogosto pojavi po posodobitvi različice PHP.

Kako odpraviti napake PHP, ki jih ustvari sizeof()?

Najenostavnejša metoda je zamenjava funkcijskega klica sizeof() s klicem funkcije count().

V primeru tistih, ki uporabljajo stare verzije modula Cross Sell Product Display, rešitev je preprosta. Zamenjane bodo funkcije iz linije 18 in 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;
	
}

Zgornja koda, v kateri je sizeof() bo nadomeščen z:

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

Ta sprememba najprej preveri, ali $crosssells je array uporabo funkcije is_array() in sicer se vrne false.

V primeru $crosssells je array, se uporablja funkcija count() za določitev števila elementov v array. Če je število elementov nič oz $crosssells je prazen niz, vrne se false.

Pustite komentarje, če obstajajo kakršna koli pojasnila ali dodatki k tej vadnici.

Strasten do tehnologije, z veseljem pišem na StealthSettings.com od leta 2006. Imam bogate izkušnje s operacijskimi sistemi: macOS, Windows in Linux, ter programskimi jeziki in platformami za bloganje (WordPress) in za spletne trgovine (WooCommerce, Magento, PrestaShop).

kako » WordPress » fiksna PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable 
Pustite komentar