Parandage PHP HOIATUS: Suurus (): Parameeter peab olema massiiv või objekt, mis rakendab loendatavat

PHP viga, mis kuvatakse paljudes WordPress Plugins mida pole pikka aega värskendatud või mis on ühilduvad PHP uuemate versioonidega. PHP hoiatus: suurus (): parameeter peab olema massiiv või objekt, mis rakendab loendatavat.

Meie stsenaariumi korral ilmus PHP viga moodulis Cross Sell Product Display WooCommerce jaoks.

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 ce apare eroarea php hoiatus: suurus (): parameeter peab olema massiiv või objekt, mis rakendab loendatavat?

Probleem, mis selle php -viga genereerib, on funktsioon sizeof() mis Php 7.2 või järgnevate versioonide versioonis võib selle tõrke genereerida, kui antud parameeter ei ole a array või objekt, mis liidest rakendab Countable.

Seetõttu kuvatakse viga sageli pärast PHP versiooni värskendust.

Kuidas lahendada PHP vigu genereeritud sizeof()?

Lihtsaim meetod on funktsiooni kõne asendamine sizeof() funktsiooni üleskutsega count().

Nende puhul, kes kasutavad mooduli vanu versioone Cross Sell Product Display, lahendus on lihtne. Rida 18 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 suurus () asendatakse:

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 muutus kontrollib esimest korda, kui $crosssells See on a array funktsiooni kasutamine is_array() ja muidu naaseb false.

Kui $crosssells See on a array, funktsiooni kasutatakse count() Üksuste arvu määramiseks array. Kui üksuste arv on null või $crosssells See on vaakum String, see tagastab vale.

Jätke kommentaarid, kui selle õpetuse kohta tuleb selgitada või lõpule viia.

Kirglik tehnoloogia vastu kirjutan koos Stealthsetts.com -i naudinguga alates 2006. aastast. Mul on rikkalik kogemus opsüsteemides: MacOS, Windows ja Linux, aga ka programmeerimiskeelte ja ajaveebiplatvormide (WordPress) ning veebipoodide jaoks (WooCommerce, Magento, Prashop).

Kodu Teie IT -õpetuste allikas, kasulikud näpunäited ja uudised. Parandage PHP HOIATUS: Suurus (): Parameeter peab olema massiiv või objekt, mis rakendab loendatavat
Kommentaari jätma