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

Błąd PHP, który pojawia się w wielu WordPress Plugins które nie były aktualizowane od dłuższego czasu lub są niekompatybilne z nowszymi wersjami PHP. PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable.

W naszym scenariuszu wystąpił błąd PHP w module Cross Sell Product Display dla 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

Dlaczego występuje błąd PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable ?

Problemem, który generuje ten błąd PHP, jest funkcja sizeof() który w wersji PHP 7.2 lub późniejszych może generować ten błąd, jeśli podany parametr nie jest równy jeden array lub obiekt, który implementuje interfejs Countable.

Dlatego błąd często pojawia się po aktualizacji wersji PHP.

Jak rozwiązywać błędy PHP generowane przez sizeof()?

Najprostszą metodą jest zastąpienie wywołania funkcji sizeof() z wywołaniem funkcji count().

W przypadku osób korzystających ze starych wersji modułu Cross Sell Product Display, rozwiązanie jest proste. Funkcje z linii 18 cali zostaną zastąpione 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;
	
}

Powyższy kod w którym jest sizeof() zostanie zastąpiony przez:

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

Ta modyfikacja najpierw sprawdza, czy $crosssells jest array za pomocą funkcji is_array() a w przeciwnym razie zwraca false.

W przypadku $crosssells jest array, funkcja jest używana count() określić liczbę elementów w array. Jeśli liczba elementów wynosi zero lub $crosssells jest pustym łańcuchem, zwracana jest wartość false.

Zostaw komentarz, jeśli są jakieś wyjaśnienia lub uzupełnienia tego samouczka.

Pasjonat technologii, z przyjemnością piszę dalej StealthSettings.com od 2006 roku. Mam duże doświadczenie w systemach operacyjnych: macOS, Windows şi Linux, ale także w językach programowania i platformach blogowych (WordPress) oraz dla sklepów internetowych (WooCommerce, Magento, PrestaShop).

jak » WordPress » Fix PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable 
Zostaw komentarz