Fix php -advarsel: Størrelse af (): Parameter skal være en matrix eller et objekt, der implementerer tælles

En PHP -fejl, der vises i mange WordPress Plugins som ikke er blevet opdateret i lang tid eller er uforenelige med nyere versioner af PHP. Php -advarsel: størrelse af (): Parameter skal være en matrix eller et objekt, der implementerer tælle.

I vores scenarie optrådte PHP -fejlen ved et modul Cross Sell Product Display For 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 ADVARSEL: STØRRELSEOF (): Parameter skal være en matrix eller et objekt, der implementerer tælles?

Problemet, der genererer denne PHP -fejl, er funktionen sizeof() som i versionen af ​​PHP 7.2 eller efterfølgende versioner, kan generere denne fejl, hvis den givne parameter ikke er en array eller et objekt, der implementerer grænsefladen Countable.

Derfor vises fejlen ofte efter en opdatering af PHP -versionen.

Hvordan løser du PHP -fejl genereret af sizeof()?

Den enkleste metode er at erstatte opkaldet til funktionen sizeof() med et opkald til funktionen count().

I tilfælde af dem, der bruger de gamle versioner af modulet Cross Sell Product Display, løsningen er enkel. Funktionerne fra linje 18 erstattes 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;
	
}

Ovenstående kode, hvor størrelse af () vil blive erstattet med:

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

Denne ændring kontrollerer først, om $crosssells Det er en array ved hjælp af funktionen is_array() og ellers vender tilbage false.

Hvis $crosssells Det er en array, funktionen bruges count() at bestemme antallet af varer i array. Hvis antallet af varer er nul eller $crosssells Det er en vakuumstreng, den returnerer falsk.

Efterlad kommentarer, hvis der skal foretages afklaringer eller færdiggørelser til denne tutorial.

Jeg er lidenskabelig med teknologi og skriver med glæde på stealthsetts.com startende med 2006. Jeg har en rig oplevelse i operativsystemer: macOS, Windows og Linux, men også inden for programmeringssprog og blogplatforme (WordPress) og til online butikker (Woocommerce, Magento, Presashop).

Hjem Din kilde til it -tutorials, nyttige tip og nyheder. Fix php -advarsel: Størrelse af (): Parameter skal være en matrix eller et objekt, der implementerer tælles
Efterlad en kommentar