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

PHP klaida, kuri atsiranda daugelyje WordPress Plugins kurie nebuvo atnaujinami ilgą laiką arba yra nesuderinami su naujesnėmis PHP versijomis. PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable.

Pagal mūsų scenarijų modulyje įvyko PHP klaida Cross Sell Product Display už 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

Kodėl atsiranda klaida PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable ?

Problema, kuri sukuria šią PHP klaidą, yra funkcija sizeof() kuri PHP 7.2 ar naujesnėse versijose gali sugeneruoti šią klaidą, jei nurodytas parametras nėra vienas array arba sąsają įgyvendinantis objektas Countable.

Todėl klaida dažnai pasirodo atnaujinus PHP versiją.

Kaip išspręsti PHP klaidas, kurias sugeneravo sizeof()?

Paprasčiausias būdas yra pakeisti funkcijos iškvietimą sizeof() su funkciniu skambučiu count().

Tiems, kurie naudoja senas modulio versijas Cross Sell Product Display, sprendimas paprastas. Bus pakeistos 18 colių linijos funkcijos 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;
	
}

Aukščiau pateiktas kodas, kuriame jis yra sizeof() bus pakeistas:

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

Šis pakeitimas pirmiausia patikrina, ar $crosssells yra array naudojant funkciją is_array() ir, kitaip, grąžina false.

Tuo atveju $crosssells yra array, funkcija naudojama count() nustatyti elementų skaičių array. Jei elementų skaičius lygus nuliui arba $crosssells yra tuščia eilutė, grąžinama false.

Palikite komentarus, jei yra kokių nors šios pamokos paaiškinimų ar papildymų.

Technologijų entuziastas, nuo 2006 metų su malonumu rašau „StealthSettings.com“. Turiu išsamią patirtį su operacinėmis sistemomis: macOS, „Windows“ ir „Linux“, taip pat programavimo kalbomis ir blogo platformomis („WordPress“) bei internetinės parduotuvės platformomis („WooCommerce“, „Magento“, „PrestaShop“).

kaip » WordPress » nustatyti PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable 
Palikite komentarą