Sửa chữa PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable 

Một lỗi PHP xuất hiện trong nhiều WordPress Plugins đã lâu không được cập nhật hoặc không tương thích với các phiên bản PHP mới hơn. PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable.

Trong kịch bản của chúng tôi, lỗi PHP xảy ra trong một mô-đun Cross Sell Product Display vì 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

Tại sao lỗi xảy ra PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable ?

Vấn đề tạo ra lỗi PHP này là chức năng sizeof() trong phiên bản PHP 7.2 trở lên, có thể tạo ra lỗi này, nếu tham số đã cho không phải là một array hoặc một đối tượng thực hiện giao diện Countable.

Do đó, lỗi thường xuất hiện sau khi cập nhật phiên bản PHP.

Cách giải quyết các lỗi PHP được tạo bởi sizeof()?

Phương pháp đơn giản nhất là thay thế lời gọi hàm sizeof() với lời gọi hàm count().

Trong trường hợp những người sử dụng các phiên bản cũ của mô-đun Cross Sell Product Display, giải pháp rất đơn giản. Các chức năng từ dòng 18 inch sẽ được thay thế 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;
	
}

Đoạn mã trên trong đó nó là sizeof() sẽ được thay thế bởi:

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

Sửa đổi này đầu tiên kiểm tra nếu $crosssells là một array sử dụng chức năng is_array() và, nếu không, trả về false.

Trong trường hợp $crosssells là một array, chức năng được sử dụng count() xác định số phần tử trong array. Nếu số phần tử bằng XNUMX hoặc $crosssells là một chuỗi rỗng, false được trả về.

Để lại nhận xét nếu có bất kỳ sự làm rõ hoặc bổ sung nào cho hướng dẫn này.

Là người yêu công nghệ, tôi rất vui được viết tại StealthSettings.com từ năm 2006. Tôi có kinh nghiệm đa dạng với các hệ điều hành: macOS, Windows và Linux, cũng như trong các ngôn ngữ lập trình và nền tảng blogging (WordPress) và cửa hàng trực tuyến (WooCommerce, Magento, PrestaShop).

Làm thế nào để » WordPress » Sửa chữa PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable 
Để lại một bình luận