Nasıl bir ölümcül hata düzeltebilirim: Yalnızca Macintosh üzerinde bulunuyor sınıf redeclare değil mi?

3 Cevap php

Ben bir Macintosh üzerinde çalıştırmak, yalnızca bu ölümcül hatayı olsun, ama değil Tarayıcı durum için kontrol dışında, koşullu döngüler aynı kodu çalıştırmak beri mantıklı değil bir windows tarayıcınızdaki:

Birisi bana php bu hatayı durdurmak için nasıl anlamanıza yardımcı olabilir? Hata QEnterKeyEvent İLK örneği ... ve NOT saniye oluşur. Bu mantıklı değil.

Kodda, ilk örneği hiç denir ilk kez, bu yüzden sınıf henüz bildiğim kadarıyla söyleyebilirim olarak yaratılmıştır olmamıştır.

Yine hata diyor: class QEnterKeyEvent redeclare olamaz

// Key-Specific Events (EnterKey, EscapeKey, UpArrowKey, DownArrowKey, etc.)

if (QApplication::IsBrowser(QBrowserType::Macintosh)) {
	echo "keyspecific events - macintosh";

	class QEnterKeyEvent extends QKeyPressEvent {
		protected $strCondition = 'event.keyCode == 13';
	}
	class QEscapeKeyEvent extends QKeyPressEvent {
		protected $strCondition = 'event.keyCode == 27';
	}
	class QUpArrowKeyEvent extends QKeyPressEvent {
		protected $strCondition = 'event.keyCode == 38';
	}
	class QDownArrowKeyEvent extends QKeyPressEvent {
		protected $strCondition = 'event.keyCode == 40';
	}
} else {
	echo "key specific events - windows";

	class QEnterKeyEvent extends QKeyDownEvent {
		protected $strCondition = 'event.keyCode == 13';
	}
	class QEscapeKeyEvent extends QKeyDownEvent {
		protected $strCondition = 'event.keyCode == 27';
	}
	class QUpArrowKeyEvent extends QKeyDownEvent {
		protected $strCondition = 'event.keyCode == 38';
	}
	class QDownArrowKeyEvent extends QKeyDownEvent {
		protected $strCondition = 'event.keyCode == 40';
	}
}

3 Cevap

Bu kod örneği QCodo kod tabanı ögeleri görmek? this ve this: Bu durumda muhtemelen orada bir görünüm sonra, kendi "Bugs and Issues" forum. yoluyla sorunu bildirmek gerektiğini, ben raporların bir çift var zaten görüyorum. ..

İşte (Qcodo sitesinde bir forum sonrası gelen) tam kod bloğu bulunuyor:

// Key-Specific Events (EnterKey, EscapeKey, UpArrowKey, DownArrowKey, etc.)

if (QApplication::IsBrowser(QBrowserType::Macintosh)) {
    class QEnterKeyEvent extends QKeyPressEvent {
        protected $strCondition = 'event.keyCode == 13';
    }
    class QEscapeKeyEvent extends QKeyPressEvent {
        protected $strCondition = 'event.keyCode == 27';
    }
    class QUpArrowKeyEvent extends QKeyPressEvent {
        protected $strCondition = 'event.keyCode == 38';
    }
    class QDownArrowKeyEvent extends QKeyPressEvent {
        protected $strCondition = 'event.keyCode == 40';
    }
} else {
    class QEnterKeyEvent extends QKeyDownEvent {
        protected $strCondition = 'event.keyCode == 13';
    }
    class QEscapeKeyEvent extends QKeyDownEvent {
        protected $strCondition = 'event.keyCode == 27';
    }
    class QUpArrowKeyEvent extends QKeyDownEvent {
        protected $strCondition = 'event.keyCode == 38';
    }
    class QDownArrowKeyEvent extends QKeyDownEvent {
        protected $strCondition = 'event.keyCode == 40';
    }
}

Yani ikinci bir okuma, ben sorunu bu kod bloğu hem de sınıf tanımları vurur ki değil, ama bu kod bloğu aslında iki kez denir oluyor inanıyorum. Qcodo kez başlatılır, bu oluşacak ve öyle (Qcodo bir bakışta) görünüyor.

QApplicationBase :: Initialize () aşağıdaki kod var:

  // Preload Class Files
  foreach (QApplication::$PreloadedClassFile as $strClassFile)
      require($strClassFile);

Aşağıdaki kod ile değiştirmeyi deneyin ve sorunun giderilip giderilmediğini görmek? Eğer öyleyse, yanlışlıkla iki kez yere kodunuzu Qcodo başlatılır olabilir.

  // Preload Class Files
  foreach (QApplication::$PreloadedClassFile as $strClassFile)
      require_once($strClassFile);

Kodunun iki blok aynı sınıfını tanımlar:

class QEnterKeyEvent extends QKeyDownEvent {
            protected $strCondition = 'event.keyCode == 13';
}

Verdiğiniz örnek kod, bu hem hatayı korumak ve çözmek için kod miktarını azaltacaktır tamamen if / else ifadeleri, dışında o sınıfı tanımlamak daha mantıklı.

Ancak, kod okurken parantez uyumsuz olabilir şüpheleniyorsanız; yapıştırmak gibi pasajı gelen, hata ortaya çıkmaz.

(Bunlar aynı koşullu parçası değildir, çünkü) ikinci sınıf tanımı ilk olarak sıra oluyorsa o zaman bu hatayı görmek için beklenebilir.

(Eğer mevcut yapı için iyi nedenler, verdiğiniz kod parçasında belirtilen olmayan olanlar olabilir) tekrarını önlemek için kodunuzu yeniden değil karar verirseniz, class_exists() bir girişimi önlemek için PHP'nin kullanabilirsiniz sınıf tanımını çoğaltarak at:

} else {
  if ( !class_exists('QEnterKeyEvent') ) {
    class QEnterKeyEvent extends QKeyDownEvent {
      protected $strCondition = 'event.keyCode == 13';
    }
  }
}

Bu yaklaşımı kullanırsanız, size her durumda onu beklediğiniz gibi sınıf tanımlanır dikkatlice kontrol etmek mantıklı olur.

PS. Bu kod örneği QCodo kod temeli dan mı? Eğer öyleyse, muhtemelen kendi "Bugs and Issues" forum. yoluyla sorunu bildirmek gerektiğini

PPS. Oh bak. this görmek ve this ...

Ben bir müşteri için XSilva en Lightspeed Webstore yüklemeye çalışırken aynı sorun haline çalıştırmak. Bazı kazma ve testten sonra, ben sorunu çözdüm. (Bilginize basitçe 'Require_oncenin' için 'gerektiren' değişiyor - iyi bir fikir olsa da - benim için işe yaramadı.) Ben çirkin kesmek olduğunu biliyorum, ama ben (aşağıdaki gibi) kontrol edin, bir class_exists ile sorunlu kod bloğunu tamamladı:

// Key-Specific Events (EnterKey, EscapeKey, UpArrowKey, DownArrowKey, etc.)
if (QApplication::IsBrowser(QBrowserType::Macintosh)) {
    if(!class_exists('QEnterKeyEvent') and !class_exists('QEscapeKeyEvent') and !class_exists('QUpArrowKeyEvent') and !class_exists('QDownArrowKeyEvent')) {
        class QEnterKeyEvent extends QKeyPressEvent {
            protected $strCondition = 'event.keyCode == 13';
        }   
        class QEscapeKeyEvent extends QKeyPressEvent {
            protected $strCondition = 'event.keyCode == 27';
        }   
        class QUpArrowKeyEvent extends QKeyPressEvent {
            protected $strCondition = 'event.keyCode == 38';
        }   
        class QDownArrowKeyEvent extends QKeyPressEvent {
            protected $strCondition = 'event.keyCode == 40';
        }   
    }   
} else {
    class QEnterKeyEvent extends QKeyDownEvent {
        protected $strCondition = 'event.keyCode == 13';
    }   
    class QEscapeKeyEvent extends QKeyDownEvent {
        protected $strCondition = 'event.keyCode == 27';
    }   
    class QUpArrowKeyEvent extends QKeyDownEvent {
        protected $strCondition = 'event.keyCode == 38';
    }   
    class QDownArrowKeyEvent extends QKeyDownEvent {
        protected $strCondition = 'event.keyCode == 40';
    }   
}