Исправлено предупреждение PHP: sizeof (): параметр должен быть массивом или объектом, который реализует исчезновение

Ошибка PHP, которая появляется во многих WordPress Plugins которые не были обновлены в течение длительного времени или несовместимы с новыми версиями PHP. Предупреждение PHP: sizeof (): параметр должен быть массивом или объектом, который реализует счетный.

В нашем сценарии ошибка PHP появилась в модуле Cross Sell Product Display для 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

DE CE APARE EROAREA PHP Предупреждение: sizeof (): параметр должен быть массивом или объектом, который реализует исчезновение?

Проблема, которая генерирует эту ошибку PHP, - это функция sizeof() который в версии PHP 7.2 или последующих версий может генерировать эту ошибку, если заданный параметр не является array или объект, который реализует интерфейс CountableПолем

Поэтому ошибка часто появляется после обновления версии PHP.

Как решать ошибки PHP, сгенерированные sizeof()?

Самый простой метод - заменить вызов на функцию sizeof() с вызовом функции count()Полем

В случае тех, кто использует старые версии модуля Cross Sell Product Display, решение просто. Функции из строки 18 будут заменены 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;
	
}

Приведенный выше код, в котором sizeof () будет заменен:

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

Это изменение сначала проверяет, если $crosssells Это array используя функцию is_array() и в противном случае возвращается falseПолем

Если $crosssells Это array, функция используется count() Чтобы определить количество элементов в arrayПолем Если количество элементов равно нулю или $crosssells Это вакуумная строка, она возвращает false.

Оставьте комментарии, если в этом уроке должны быть сделаны разъяснения или завершения.

Увлеченными технологиями, я с удовольствием пишу на stealthsetts.com, начиная с 2006 года. У меня богатый опыт работы в операционных системах: macOS, Windows и Linux, а также в языках программирования и платформах для блога (WordPress) и для интернет -магазинов (WooCommerce, Magento, Presashop).

Дом Ваш источник его учебников, полезных советов и новостей. Исправлено предупреждение PHP: sizeof (): параметр должен быть массивом или объектом, который реализует исчезновение
Оставьте комментарий