Popravite PHP Opozorilo: sizeof (): parameter mora biti matrika ali predmet, ki izvaja štetje

Napaka PHP, ki se pojavi v mnogih WordPress Plugins ki že dolgo niso posodobljeni ali so nezdružljivi z novejšimi različicami PHP. PHP Opozorilo: sizeof (): parameter mora biti matrika ali predmet, ki izvaja štetje.

V našem scenariju se je napaka PHP pojavila na 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

DE CE APARE EROAREA PHP OPOZORILO: SizeOF (): Parameter mora biti matrika ali predmet, ki izvaja štetje?

Težava, ki povzroči to napako PHP, je funkcija sizeof() ki v različici PHP 7.2 ali naslednjih različic lahko ustvari to napako, če dani parameter ni array ali predmet, ki izvaja vmesnik Countable.

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

Kako rešite napake PHP, ki jih ustvari sizeof()?

Najpreprostejša metoda je nadomestiti klic na funkcijo sizeof() s klicem na funkcijo count().

V primeru tistih, ki uporabljajo stare različice modula Cross Sell Product Display, rešitev je preprosta. Funkcije iz vrstice 18 bodo zamenjane 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 bo sizeof () nadomeščena 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, če $crosssells To je array z uporabo funkcije is_array() in sicer se vrne false.

Če $crosssells To je array, uporabljena je funkcija count() za določitev števila elementov v array. Če je število elementov nič oz $crosssells To je vakuumski niz, vrne se napačno.

Če želite v tej vadnici, pustite pripombe, če je treba pojasnila ali dokončanja.

Strastno do tehnologije, pišem z užitkom na StealthSetts.com, ki se začne z letom 2006. Imam bogato izkušnjo v operacijskih sistemih: MacOS, Windows in Linux, pa tudi v programskih jezikih in platformah za bloganje (WordPress) in za spletne trgovine (WooCommerce, Magento, Presishop).

Doma Vaš vir IT vaj, koristni nasveti in novice. Popravite PHP Opozorilo: sizeof (): parameter mora biti matrika ali predmet, ki izvaja štetje
Pustite komentar