σταθερός PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable 

Ένα σφάλμα PHP που εμφανίζεται σε πολλά WordPress Plugins τα οποία δεν έχουν ενημερωθεί για μεγάλο χρονικό διάστημα ή δεν είναι συμβατά με νεότερες εκδόσεις της PHP. PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable.

Στο σενάριό μας, το σφάλμα 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

Γιατί παρουσιάζεται το σφάλμα PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable ?

Το πρόβλημα που δημιουργεί αυτό το σφάλμα PHP είναι η συνάρτηση sizeof() το οποίο στην έκδοση της PHP 7.2 ή νεότερες εκδόσεις, μπορεί να δημιουργήσει αυτό το σφάλμα, εάν η δεδομένη παράμετρος δεν είναι μία array ή ένα αντικείμενο που υλοποιεί τη διεπαφή Countable.

Επομένως, το σφάλμα εμφανίζεται συχνά μετά από μια ενημέρωση της έκδοσης PHP.

Τρόπος επίλυσης σφαλμάτων PHP που δημιουργούνται από sizeof()?

Η απλούστερη μέθοδος είναι η αντικατάσταση της κλήσης συνάρτησης sizeof() με κλήση συνάρτησης count().

Στην περίπτωση όσων χρησιμοποιούν παλιές εκδόσεις της ενότητας Cross Sell Product Display, η λύση είναι απλή. Οι λειτουργίες από τη γραμμή 18 in. θα αντικατασταθούν 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.

Αφήστε σχόλια εάν υπάρχουν διευκρινίσεις ή προσθήκες σε αυτό το σεμινάριο.

Παθιασμένος με την τεχνολογία, γράφω με ευχαρίστηση StealthSettings.com από το 2006. Έχω μεγάλη εμπειρία σε λειτουργικά συστήματα: macOS, Windows και Linux, αλλά και σε γλώσσες προγραμματισμού και πλατφόρμες blogging (WordPress) και για ηλεκτρονικά καταστήματα (WooCommerce, Magento, PrestaShop).

πώς να » WordPress » σταθερός PHP Warning: sizeof(): Parameter must be an array or an object that implements Countable 
Αφήστε ένα σχόλιο