2012-04-02 40 views
6

Bu, n00bish bir soru olabilir, ancak her neyse. Form doğrulaması için istisnaları kullanmak tamam mı? Kullanıcıların adlarını ve e-postalarını soran bir formum olduğunu ve aşağıdakileri yapmanın doğru olduğunu söyleyebilirmiyim? Kullanıcı hem boş bir ad ve geçersiz e-posta gönderirse bu -eğer AyrıcaForm doğrulama için istisnalar kullanılmalı mı?

try { 
    if (empty($_POST["name"])) { 
     throw new UserRegistrationException("Your name cannot be empty."); 
    } 

    if (filter_var($_POST["email"])) { 
     throw new UserRegistrationException("Invalid email"); 
    } 

    // Save new user into database 
} catch (UserRegistrationException $e) { 
    // Show errors on screen 
} 

, istisnalar hem yürütme veya ilk görünen tek olurdu aslında BT yapmak doğru yoldur (Bu durumda adı bir)?

Bu arada, PHP kullanıyorum.

+0

Bu, istisnaları kullanmanın kesinlikle garip bir yoludur. "istisnaların her ikisi de sadece ilk ortaya çıkanı yürütür" - 5 satır kod yazmak ve kendinizi görmek zor mu? – zerkms

+0

Sadece ilk atılan ve yakalanan, diğerleri atlandı. Hata mesajlarını biriktirmeniz gerekiyorsa, sadece bir düz eski/else zinciri kullanmaktan ve bir diziye mesaj eklemek daha iyidir. –

+0

@Michael Düşündüm de ... İstisnalar kullanmak için iyi bir ok gibi görünüyordu (geçersiz giriş _exceptional_ olarak kabul edilmelidir), ama ben/else ' – federicot

cevap

4

Program akışını durduracak veya değiştirecek herhangi bir şey için kişisel olarak özel olarak kullanmak istiyorum. Diğer bir deyişle, belirli bir alanın validasyonu verilerin nasıl işlendiğini değiştirirse veya sürecin tekrarlanmasını gerektiriyorsa, hata işleme için her zaman istisna kullanırım.

Önemsizse veya hata mesajlarının bir listesini derlediğimde, istisnaları tetiklemem.

Soruları yanıtlamak için iki istisna aynı anda atılamaz. Ulaşılan ilk atış ifadesi atılacaktır. Bu, bazen başka bir tür istisna olarak yeniden düşünmenin mantıklı olmadığını söylemez.

+0

Sanırım bu, önemsiz bir durum (ve ayrıca bir liste derliyorum) hata iletilerinden) bu durumda özel istisnalar uymuyor – federicot

+0

Ayrıca, istisna oluşturulmuş istisnalar yığını eklemek için Özel Durum sınıfını genişletebilir, ardından bir toplu istisna atarsınız (hata iletilerinin bir listesini derlemek için kullanabilirsiniz, İlgilenilen belirli bir yeri, vb.) – landons

+0

Veya eski moda yolu (örneğin, bir diziye ekleme) gibi bir doğrulama hataları koleksiyonu oluşturabilir ve ardından tüm bu hataları içeren tek bir doğrulama istisnası atabilirsiniz. –

4

İstisnalar için kullanım durumu istisnai koşullar içindir. Bu durumda, kullanıcı adı ve şifre alanlarının boş olmasını mı bekliyorsunuz? Bir web formu görüntülüyorsanız, boş kullanıcı adı ve parola alanlarının boş olmasını beklediğinizi ve bu durumu bir istisna atmak yerine açıkça denetlemeniz gerektiğini iddia ediyorum.

Özel sorunuzu yanıtlamak için, bir hatayla karşılaşıldığında her iki istisna da atılmayacaktır. Throw deyimi programı catch bloğuna gönderir. Oradan kontrol normal olarak akacaktır.

+5

Tanımı gereği her istisna beklenmiyor. Dünyada nasıl başa çıkacağını biliyor musun? Birincil yürütmenin devam etmemesi gereken durumlar için istisnaların kullanıldığını iddia ediyorum. – landons

+0

Basitçe, bir diziye doğrulama hatalarını ekleyebilir ve sonra bir istisna olarak atılan bir dizeye patlayabilir – Alex

İlgili konular