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

PHP kļūda, kas parādās daudzos WordPress Plugins kas nav tikuši atjaunināti ilgu laiku vai nav saderīgi ar jaunākām PHP versijām. PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable.

Mūsu scenārijā PHP kļūda radās modulī Cross Sell Product Display par 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

Kāpēc rodas kļūda PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable ?

Problēma, kas rada šo PHP kļūdu, ir funkcija sizeof() kas PHP 7.2 vai jaunākās versijās var ģenerēt šo kļūdu, ja norādītais parametrs nav viens array vai objekts, kas ievieš saskarni Countable.

Tāpēc kļūda bieži parādās pēc PHP versijas atjaunināšanas.

Kā atrisināt PHP kļūdas, ko rada sizeof()?

Vienkāršākā metode ir aizstāt funkcijas izsaukumu sizeof() ar funkciju izsaukumu count().

Tiem, kas izmanto vecās moduļa versijas Cross Sell Product Display, risinājums ir vienkāršs. Funkcijas no 18 collu līnijas tiks aizstātas 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;
	
}

Iepriekš minētais kods, kurā tas atrodas sizeof() tiks aizstāts ar:

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

Šī modifikācija vispirms pārbauda, ​​vai $crosssells ir array izmantojot funkciju is_array() un pretējā gadījumā atgriežas false.

Gadījumā, ja $crosssells ir array, funkcija tiek izmantota count() lai noteiktu elementu skaitu array. Ja elementu skaits ir nulle vai $crosssells ir tukša virkne, tiek atgriezta false.

Atstājiet komentārus, ja šajā apmācībā ir kādi precizējumi vai papildinājumi.

Tehnoloģijas entuziasts, ar prieku rakstu vietnē StealthSettings.com no 2006. gada. Man ir plaša pieredze operētājsistēmās: macOS, Windows un Linux, kā arī programmēšanas valodās un blogošanas platformās (WordPress) un tiešsaistes veikalu platformās (WooCommerce, Magento, PrestaShop).

kā uz » WordPress » Noteikt PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable 
Leave a Comment