PHP Varning: sizeof

av

0

Fix PHP-varning: sizeof(): Parametern måste vara en array eller ett objekt som implementerar Countable

Fix PHP-varning: sizeof(): Parametern måste vara en array eller ett objekt som implementerar Countable

0
PHP Varning: sizeof

Ett PHP-fel som förekommer hos många WordPress Plugins som inte har uppdaterats på länge eller är inkompatibla med nyare versioner av PHP. PHP-varning: sizeof(): Parametern måste vara en array eller ett objekt som implementerar Countable.

I vårt scenario inträffade PHP-felet i en modul Cross Sell Product Display för 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 Varning: sizeof(): Parametern måste vara en array eller ett objekt som implementerar Countable ?

Problemet som genererar detta PHP-fel är funktionen sizeof() som i versionen av PHP 7.2 eller senare versioner kan generera detta fel, om den givna parametern inte är en array eller ett objekt som implementerar gränssnittet Countable.

Därför uppstår felet ofta efter en uppdatering av PHP-versionen.

Hur man löser PHP-fel som genereras av sizeof()?

Den enklaste metoden är att ersätta funktionsanropet sizeof() med ett funktionsanrop count().

När det gäller de som använder gamla versioner av modulen Cross Sell Product Display, lösningen är enkel. Funktionerna från 18-tumslinjen kommer att ersättas 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;
	
}

Koden ovan där sizeof() är kommer att ersättas 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;
	
}

Denna ändring kontrollerar först om $crosssells Det är en array använder funktionen is_array() och i övrigt återvänder false.

I händelse av att $crosssells Det är en array, används funktionen count() för att bestämma antalet element i array. Om antalet element är noll eller $crosssells är en tom sträng returneras false.

Lämna kommentarer om det finns några förtydliganden eller tillägg till denna handledning.

Fix PHP-varning: sizeof(): Parametern måste vara en array eller ett objekt som implementerar Countable

Du kanske också är intresserad av...

Lämna ett svar

Din e-postadress kommer inte att publiceras. Obligatoriska fält är markerade *