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

Een PHP-fout die in veel voorkomt WordPress Plugins die lange tijd niet zijn bijgewerkt of niet compatibel zijn met nieuwere versies van PHP. PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable.

In ons scenario deed de PHP-fout zich voor in een module Cross Sell Product Display voor 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

Waarom de fout optreedt PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable ?

Het probleem dat deze PHP-fout genereert, is de functie sizeof() die in de versie van PHP 7.2 of latere versies deze fout kan genereren, als de gegeven parameter niet één is array of een object dat de interface implementeert Countable.

Daarom verschijnt de fout vaak na een update van de PHP-versie.

Hoe PHP-fouten op te lossen die zijn gegenereerd door sizeof()?

De eenvoudigste methode is om de functieaanroep te vervangen sizeof() met een functieoproep count().

In het geval van degenen die oude versies van de module gebruiken Cross Sell Product Display, de oplossing is simpel. De functies uit de 18 inch lijn worden vervangen 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;
	
}

De bovenstaande code waarin het is sizeof() wordt vervangen door:

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

Deze wijziging controleert eerst of $crosssells een array de functie gebruiken is_array() en anders retourneert false.

In het geval van $crosssells een array, wordt de functie gebruikt count() om het aantal elementen in te bepalen array. Als het aantal elementen nul is of $crosssells is een lege string, false wordt geretourneerd.

Laat opmerkingen achter als er verduidelijkingen of aanvullingen zijn op deze tutorial.

Gepassioneerd door techniek schrijf ik met plezier verder StealthSettings.com sinds 2006. Ik heb uitgebreide ervaring met besturingssystemen: macOS, Windows şi Linux, maar ook in programmeertalen en blogplatforms (WordPress) en voor online winkels (WooCommerce, Magento, PrestaShop).

Hoe werkt het? » WordPress » Bepalen PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable 
Laat een bericht achter