Neden yerine İstisna İşleme hataları dizisi kullanmak için değil mi?

5 Cevap php

Yerine neden hatalar atma hataları dizi kullanarak ve kodun sonraki boş değilse İstisna işleme benim için çok kafa karıştırıcı .... kontrol değil, ben bu amaca anlayamıyorum ... Herkes beni aydınlatmak!?

onlar) (kalıp ile karşılaştırın kod yürütülmesini durdurmak için daha iyi değil, ben istemiyorsam neden kod yürütme durdurmak istiyorsunuz!? tabii yapmam

Ben bir acemi programcı değilim, o da sizin için kafa karıştırıcı olabilir, ya da ben çok çirkin bir şey deneyimli değilim çünkü.

Sadece PHP bağlamında lütfen.

5 Cevap

Eğer sözdizimi açık bir parça olmadan kontrol akışında bir sıçrama ekleyebilirsiniz çünkü bir özel durum için karar olabilir bir nedeni budur. Bununla ne demek istiyorsun?

ziyade

$returnVal = doSomeDiskFunction();
if($returnVal == $ERROR_CODEA)
{
    // do some stuff
}
else if( $returnVal == $ERROR_CODEB)
{
    //do some stuff
}

$returnVal = doSomeOtherDiskFunction();
if($returnVal == $ERROR_CODEA)
{
    // do some stuff
}
else if( $returnVal == $ERROR_CODEB)
{
    //do some stuff
}

Sadece olabilir

try{
   doSomeDiskFunction();
   doSomeOtherDiskFunction();
}
catch(ExceptionTyepA $exceptionA)
{
    //do some stuff
}
catch(ExceptionTypeB $exceptionB)
{
    //do some stuff
}

Çok daha temiz, evet görünüyor?? Ayrıca size çağrı yığını yayılmasının yukarı istisnası var seçerseniz potansiyel hata koşulları ile başa çıkmak için gereken çağrı kodu uyarı resmi bir yoludur.

Ayrıca, istisna size don't kötü verilerini göndererek bir kullanıcı gibi, DO gerçekleşmesini bekliyoruz bir veritabanı değil, kod bağlanmak için başarısız gibi, gerçekleşmesini bekliyoruz kodu için kullanılmalıdır . Diğer poster ne tür bir form doldurarak hataları bir sürü yapmak için bir kullanıcı beklediğiniz noktaya yapılmış, bu nedenle kötü bir kullanıcının girdiği biçiminde bazı verilere rastlamak zaman, bir istisna olmaz sana çünkü kullanıcı veri kalitesiz olmasını bekliyoruz.

Bu gerçekten bahsediyoruz ne tür bir hata bağlıdır.

Hep ölmek (); gerçekten kötü hataları için, gibi uygulama veritabanına bağlanmak olamazdı eğer.

Ancak kullanıcı girdi alır bir şey için, bir form gibi, kullanıcı yerine bir kerede tek bir alan düzeltme ve tekrar tekrar göndermek basın kalmadan, tek seferde görebilirsiniz hataları dizileri kullanmak daha iyidir.

Eğer daha ayrıntılı bilgi edinmek istiyorsanız bir alan potansiyel olarak onunla çok şeyler yanlış olabilir çünkü (ben sık sık, hataları görüntülemek için dizilerin bir dizi kullanın. Örneğin, bir kullanıcı "1337" kullanıcı adı ile üye çalışırsa, Birden koşullarına karşı denetlemek için bir doğrulayıcı kullanacak ve "bu kullanıcı adı yönetici tarafından izin verilmeyen olmuştur", "Kullanıcı adı en az üç harf içermelidir", "adın en az 5 karakter olmalıdır" gibi şeyler ile bir dizi döndürür ve tüm bu mesajlar) söz konusu alanın üstünde aynı anda görüntülenir

Istisna işleme olmadan tamamen kod bir yolu yoktur. Örneğin, bir nesnenin uzunluğunu döndüren bir yöntem varsa onu dönün -1 bir hata olmuştur eğer. Bu, çoğu C API yerleşik nasıl.

Karmaşık sistemler inşa ediyoruz o zaman, dedi, ve yanlış davranabilir "kara kutu" kod bir ton var, istisnalar yardımcı olur. Istisnalar çalışacak şekilde bu gibi: Birisi "atar" ne zaman, çağrı yığını millet tebliğ almaya başlamak. Bir seferde bir adım. Bu yöntemlerden biri istisna "yakalamak" ve işleyebilir.

Bu neden kullanışlıdır: Bunu istisnalarını atar iç mantığı çok olan bir DB katmanı olabilir. Bir şey yanlış giderse, DB istisna işleme kodu kullanıcıya güzel bir hata mesajı gösteriyor, incelikle başarısız olabilir; aynı zamanda dikkat isteyen, admin bir metin mesajı gönderebilirsiniz.

Hatta istisna işleyicileri bir hiyerarşi oluşturabilir: onunla bir şey yaptık sonra tekrar istisna atabilir.

PHP'nin istisnalar sert berbat, ama onlar hala kendi temelleri yararları var:

  1. İstisna hakkında çok daha fazla bilgi sağlar "Yanlış giden ne?" çok daha formda (istisna bir nesnedir)
  2. Bunlar kod net olun
  3. Onlar (o için varsayar olarak çalışmaz) saptamak (eğer mümkünse) sabit olması gereken ve tam bir başarısızlık olmadan devam kod kısmının yürütülmesini kırmak için sadece makul yoldur.

Gerçekten diline bağlıdır. C bu açıdan benzer - bu bir hata işlemek için sizi zorlamaz. Çoğu fonksiyon -1 döndürür onlar bir sorun olsaydı; bunun ne olduğunu görmek için 'errno' kontrol etmek size kalmış.

İstisnalar olsa da genelde iyi bir şey vardır. Sen nadiren körü körüne bir hata oluştu eğer çalıştırmaya devam etmek istiyor (Visual Basic "On Error Resume Next" demek asla asla. Lütfen.). Eğer bir şey yapmak gerekmez eminseniz bu durum yakalamak ve hiçbir şey yapmak oldukça kolay.