En iyi alternatif istisna işleme modeli

2 Cevap php

Ne yazık ki, ben sürekli özellikler eklemek gerekir eski bir PHP4 sistemi var. Birkaç ay değilse birkaç yıl için PHP5 bir liman yapmak için kaynak olacak gibi görünmüyor. Geçtiğimiz birkaç yıl boyunca, beni rahatsız önemli şeylerden biri temiz istisnalar atmak yeteneğine sahip değildir. Bu nedenle, hata kontrol kodu her türlü sürekli oluyor ne akışını kesmek zorundadır.

Yani üzerinde soru: Eğer istisna modeli var dilde istisna işleme temizliğini taklit gördük iyi strateji nedir?

Joel bir cevap belirtildiği gibi bu istisnalar konusunda şöyle demektedir:

http://www.joelonsoftware.com/items/2003/10/13.html

Onlar bir işlev için çok olası çıkış noktaları oluşturmak. Doğru kod yazmak, gerçekten fonksiyonu sayesinde her türlü kod yolu düşünmek zorunda. Eğer bir istisna yükseltmek ve oracıkta onu yakalamak değil bir işlevi çağırmak, her zaman, tutarsız bir devlet, ya da yapmadın diğer kod yolları verileri bırakarak, aniden sona fonksiyonları neden sürpriz hatalar için fırsatlar yaratmak düşünüyorum.

Daha iyi bir alternatif terslik zaman fonksiyonları hata değerleri döndürmek için, ve ne olursa olsun bu olabilir nasıl ayrıntılı, bu açıkça ile başa çıkmak için. Bu ne iyi bir hata denetimi koyduğunuzda basit 3 satır program sıklıkla 48 hatları çiçeklenir, ama hayat bu, ve istisnalar ile bitti papering program daha güçlü yapmaz olması gerektiği doğrudur. Ben bir getiri üreten ya bir işlevi yazmak zor yani sözdizimi, birden çok değer döndüren bir işlevi çağırmak için bir kısa yol yok çünkü C / C + + / Java tarzı dilde programcılar istisnalar için çekici olmuştur nedeni basitçe düşünüyorum değer ya da bir hata döndürür.

Ancak, bir dilde iyi bir durum modeli olarak adlandırılan fonksiyonu aslında bir istisna olacağını belirtmek yapar. Bu çıkmak için fonksiyonu için sıfır ek yerleri (kod yerine sadece bir özel durum atma yanlış dönecekti) exaactly olduğunu ima, ama çıkmak için işlev için tam 1 ek yeri ve catch bloğu var ... arama fonksiyonu. Herkes can yukarı başkaları tarafından ele alınması için tüm istisnaları geçer özensiz kod yazmak, ama bu should temiz ve verimli bir şekilde kullanılabilecek bir araç alıp sizi anlamına gelmez.

Aslında, herhangi bir işlevi çağıran kod beklenen getiri değerleri aralık dışında bir değer döndürebilir. İyi bir programcı hata kodları ve koşullar da dahil olmak üzere tüm olası dönüş değerleri ile başa gidiyor. Istisna modeli sadece ona temiz bunu yapmak için bir yol verir.

2 Cevap

Her şeyden önce, one of the founders of this site dahil istisnalar doğru hata modeli Anway değildir düşünüyorum bazı insanlar vardır.

İkincisi, hata işleme fonksiyonları PHP sizin küçük sürümü için hangi bir envanterini almak için çalışmaktır. Benim hemen tepki iyi bir hata işleyicisi yazmaya vakit önermek olduğunu ve register it.

Ardından, normalde istisnalar atmak istiyorsunuz uygulama yürütme, olabildiğince yerine trigger errors. Eğer şanslı iseniz, debug_backtrace() kullanmak mümkün olacak.

İyi şanslar!

Continuation passing style. Aslında, ben o "prettyness" açısından istisnalar yener söylemek girişim istiyorum. PHP uyması için en doğal şey değil, ancak bu tür ziyaretçi olarak nesneleri ve desenleri kullanarak bunu yapabilirsiniz.

Ama gerçekten, PHP5 PHP4 yükseltme birkaç saat çalışma daha fazla olması gerekmez - çoğunlukla geriye doğru uyumlu.