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

PHP viga, mis ilmneb paljudes WordPress Plugins mida pole pikka aega värskendatud või mis ei ühildu PHP uuemate versioonidega. PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable.

Meie stsenaariumi kohaselt ilmnes PHP viga moodulis Cross Sell Product Display eest 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

Miks viga ilmneb PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable ?

Probleem, mis selle PHP vea tekitab, on funktsioon sizeof() mis PHP 7.2 või uuemates versioonides võib selle vea tekitada, kui antud parameeter pole üks array või liidest rakendav objekt Countable.

Seetõttu ilmub tõrge sageli pärast PHP versiooni värskendamist.

Kuidas lahendada PHP-vigu, mille on genereerinud sizeof()?

Lihtsaim meetod on funktsioonikutse asendamine sizeof() funktsioonikutsega count().

Nende puhul, kes kasutavad mooduli vanu versioone Cross Sell Product Display, on lahendus lihtne. 18-tollise rea funktsioonid asendatakse 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;
	
}

Ülaltoodud kood, milles see on sizeof() asendatakse järgmisega:

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

See muudatus kontrollib esmalt, kas $crosssells on array funktsiooni kasutades is_array() ja muidu naaseb false.

Juhul kui $crosssells on array, kasutatakse funktsiooni count() elementide arvu määramiseks array. Kui elementide arv on null või $crosssells on tühi string, tagastatakse false.

Kui selles õpetuses on täpsustusi või täiendusi, jätke kommentaarid.

Tehnoloogiafännina olen alates 2006. aastast rõõmuga kirjutanud lehel StealthSettings.com. Mul on laialdased kogemused operatsioonisüsteemides: macOS, Windows ja Linux, samuti programmeerimiskeeltes ja blogiplatvormides (WordPress) ning veebipoodide ja platvormidega (WooCommerce, Magento, PrestaShop).

kuidas » WordPress » Määrama PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable 
Jäta kommentaar