php bir web uygulaması için hata kodları sistematize?

4 Cevap php

Ben bir sınıf-tabanlı bir php web uygulaması üzerinde çalışıyorum. Ben nesnelerin etkileşim bazı yerler var, ve ben son kullanıcıya iletişim kurmak için hata kodlarını kullanıyorum bazı durumlar var - genellikle form değerleri eksik veya geçersiz olduğunda. Bu istisnalar yersiz (ve ben zaten istisna durumları önlemek olabilir emin değilim) durumlardır.

Bir nesne olarak, bazı 20 kullanıcı bakan iletiye karşılık, her biri kod numaraları, ve bir yönetici / geliştirici bakan bir mesaj var, bu yüzden her iki taraf oluyor biliyorum. Şimdi kod birkaç kez üzerinde çalıştık, ben hızlı bir şekilde zaten kullanılan kadarıyla seri kod numaraları anlamaya zor olduğunu bulmak, bu yüzden yanlışlıkla kod numaraları çelişkili oluşturun. Örneğin, ben sadece 12, 13, 14 ve 15 ile bu bugün yaptı.

How can I better organize this so I don't create conflicting error codes? Should I create one singleton class, errorCodes, that has a master list of all error codes for all classes, systematizing them across the whole web app? Or should each object have its own set of error codes, when appropriate, and I just keep a list in the commentary of the object, to use and update that as I go along?


Edit: So I'm liking the suggestions to use constants or named constants within the class. That gives me a single place where I programatically define and keep track of error codes and their messages.

Sonraki soru: Ben bu sınıf 'hata kodları ve mesajları için dış dünyaya arayüzü ne tür sağlıyorsunuz? Ben sınıfta triggerError(20) gibi bir şey yapmak ve sonra hata kodu geri dönmek için genel bir yöntem, sabit dize ve kullanıcı ve yönetici bakan mesaj sağlıyor musunuz?

4 Cevap

Sen defines to create named constants tüm hata kodları için bir çift oluşturabilirsiniz:

define('ERROR_CODE_SQL_QUERY', 1);
define('ERROR_CODE_PAGE_NOT_FOUND', 2);
define('ERROR_CODE_NOT_ALLOWED', 3);
// and so on

Ve sonra, kodunuzda sabitleri kullanın:

if ($errorCode == ERROR_CODE_SQL_QUERY) {
    // deal with SQL errors
}


With that, nowhere in your code you'll use the numerical value : everywhere (except in the on and only file where you put the defines), you'll use the codes.

Bu şu anlama gelir:

  • Bütün sayısal değerler sadece bir dosya ayarlanır gibi hataların daha az risk,
  • Bunun ne anlama geldiğini gösteren bir isim var sabitleri, kullanacağız gibi hataların daha az risk,
  • Ve okumak daha kolay kod.


Another idea could be to create a class to deal with errors :

class Error {
    const CODE_SQL_QUERY = 1;
    const CODE_PAGE_NOT_FOUND = 2;
    const CODE_NOT_ALLOWED = 3;

    // Add some methods here, if needed
}

Ve sonra, bu gibi bir şey kullanabilirsiniz:

if ($errorCode == Error::CODE_SQL_QUERY) {
    // deal with SQL errors
}


Which one is the best ?

Bu bir sınıf kullanarak, hataları ile uğraşmak için bazı yöntemler eklemeniz gerekiyorsa yararlı olabilir ... muhtemelen personnal tercihleri ​​meselesi. Else, tanımlar çok büyük bir çözümdür.

En azından, siz sınıf sabitleri veya üye olmak için kod numaraları çarpmak?

class MyErrorProneClass { 
    const TURNED_INTO_A_NEWT = 12;
    ...

    public function dontBurnMe() {
        // echo your error here using self::TURNED_INTO_A_NEWT
}

Bu şekilde daha çok bakım, büyük bir merkezi dosya zorunda yerine, bunları kullanmak aynı yerde hataları yönetebilirsiniz. Ben geçmişte bu yönde bir şey denedim ve onu tutmak zor olur.

Programlı hata sayılar üreten daha iyi bir uzun vadeli bir çözüm olabilir. Eğer dosya veya hat numarası (__FILE__ ve __LINE__ sırasıyla) hakkında bilgi kullanmak olsaydı, bu yardımcı olacaktır.

Doğru yönde hareket umut en azından.

Teşekkürler, Joe


Edit:

Bir sınıf üyesi yerine bu sözdizimi takip edecek:

class MyErrorProneClass { 
    protected static $turnedIntoANewt = 12;
    ...

    public function dontBurnMe() {
        // echo your error here using self::$turnedIntoANewt
}

Sabitler varsayılan olarak ortak olduğundan, istediğiniz doğrudan eğer diğer sınıflardan erişebilirsiniz. : Yani, dışarıdan, hata olarak başvurulan olacağını

MyErrorProneClass::TURNED_INTO_A_NEWT

Mesajları ilişkilendirerek için, görüntülenen dize hata kimliği (ve frontend / backend) bir eşleme (bir veritabanı veya bazı yerelleştirme dosyasında ya) kullanmak istiyorsunuz. Mesajlar için tuşları bu kullanımı uygun değil, ama siz de kodu değiştirmeden hata mesajları değiştirmek için izin verecek.

Zaten bilmiyorsanız size daha iyi bir hata mesajı ile kullanıcıya sunmak istiyorsanız trigger_error (), artı bir hata işleyicisi kullanmak için bir fikir olabilir.

Eğer exceptions kullanarak düşündünüz mü? Şimdi projenize ekleyerek muhtemelen bazı yeniden yapılanma gerektirir rağmen Onlar burada sorun için iyi bir seçim olabilir.

Bu açıdan kullanıcı / geliştirici hata mesajı ayrılmasını sorununuzu uyuyor böylece temel istisna sınıfını genişletebilirsiniz.