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

PHP-virhe, joka näkyy monissa WordPress Plugins joita ei ole päivitetty pitkään aikaan tai jotka eivät ole yhteensopivia uudempien PHP-versioiden kanssa. PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable.

Meidän skenaariossamme PHP-virhe tapahtui moduulissa Cross Sell Product Display varten 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

Miksi virhe ilmenee PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable ?

Tämän PHP-virheen aiheuttava ongelma on funktio sizeof() joka PHP 7.2:n tai uudemmissa versioissa voi aiheuttaa tämän virheen, jos annettu parametri ei ole yksi array tai objekti, joka toteuttaa rajapinnan Countable.

Siksi virhe ilmenee usein PHP-version päivityksen jälkeen.

Kuinka ratkaista PHP-virheet, jotka ovat luoneet sizeof()?

Yksinkertaisin tapa on korvata funktiokutsu sizeof() toimintokutsulla count().

Niiden, jotka käyttävät moduulin vanhoja versioita Cross Sell Product Display, ratkaisu on yksinkertainen. 18 tuuman linjan toiminnot korvataan 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;
	
}

Yllä oleva koodi, jossa se on sizeof() korvataan seuraavalla:

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

Tämä muutos tarkistaa ensin, jos $crosssells on array funktiota käyttämällä is_array() ja muuten palaa false.

Siinä tapauksessa $crosssells on array, toimintoa käytetään count() määrittääksesi elementtien lukumäärän array. Jos elementtien lukumäärä on nolla tai $crosssells on tyhjä merkkijono, palautetaan false.

Jätä kommentit, jos tähän opetusohjelmaan on selvennyksiä tai lisäyksiä.

Teknologiasta kiinnostunut, kirjoitan mielelläni StealthSettings.com-sivustolla vuodesta 2006. Minulla on laaja kokemus käyttöjärjestelmistä: macOS, Windows ja Linux, sekä ohjelmointikielistä ja blogialustoista (WordPress) ja verkkokaupoista (WooCommerce, Magento, PrestaShop).

Jätä kommentti