PHP hata raporlamayı tasarımı nasıl

3 Cevap php

How should I write error reporting modules in PHP? Say, I want to write a function in PHP: 'bool isDuplicateEmail($email)'. In that function, I want to check if the $email is already present in the database. It will return 'true', if exists. Else 'false'.

Şimdi, sorgu yürütme de o zaman ben kullanıcıya 'İç Hata' rapor etmek istediğinizden, başarısız olabilir.

The function should not die with typical mysql error: die(mysql_error(). My web app has two interfaces: browser and email(You can perform certain actions by sending an email). In both cases it should report error in good aesthetic. Do I really have to use exception handling for this?

Herkes sağlam PHP web uygulaması tasarımı öğrenebilirsiniz bazı iyi PHP projesi beni işaret edebilir?

3 Cevap

Benim PHP projelerde, ben birkaç farklı tacts denedim. Benim için iyi iş gibi görünüyor aşağıdaki çözüm için geldim:

Birincisi, ben yazmak herhangi bir büyük PHP uygulama uygulama düzeyinde veri ve davranışlarını yöneten merkez tekiz çeşit var. "Uygulama" nesne. Ben her modülünden oluşturulan geribildirim toplamak için bu nesneyi kullanın çünkü burada söz. Render modülü kullanıcıya gösterilmesi gereken gördüğü geribildirim için uygulama nesnesi sorgulayabilirsiniz.

Bir alt düzeyde, her sınıf hata yönetimi yöntemleri içeren bazı temel sınıfından türetilmiştir. Örneğin, bir "AddError (kod, string, küresel)" ve "GetErrors ()" ve "ClearErrors". "AddError" yöntemi iki şey yapar: o nesne için bir örnek özgü dizide bu hata yerel bir kopyasını saklar ve (isteğe bağlı) ("küresel" boolean) bu daha sonra mağazaları hata bu hata uygulama nesnesi bildirir render gelecekteki kullanımı.

Yani şimdi burada pratikte nasıl çalışıyor:

Belki AddError ClearErrors GetErrorCodes GetErrorsAsStrings GetErrorCount ve {[(: 'Object', aşağıdaki yöntemleri tanımlar unutmayın 5)]} kolaylık sağlamak için

// $GLOBALS['app'] = new Application();

class MyObject extends Object
{
     /**
      * @return bool Returns false if failed
      */
     public function DoThing()
     {
          $this->ClearErrors();
          if ([something succeeded])
          {
              return true;
          }
          else 
          {
              $this->AddError(ERR_OP_FAILED,"Thing could not be done");
              return false;
          }              
     }
}

$ob = new MyObject();
if ($ob->DoThing()) 
{
   echo 'Success.';
}
else 
{
   // Right now, i may not really care *why* it didn't work (the user
   // may want to know about the problem, though (see below).
   $ob->TrySomethingElse();
}

// ...LATER ON IN THE RENDERING MODULE
echo implode('<br/>',$GLOBALS['app']->GetErrorsAsStrings());

Bu hoşuma nedeni çünkü:

  1. Ben şahsen kodu daha kıvrık hale inanıyorum çünkü ben olması gerektiğini istisnalar nefret ediyorum
  2. Bazen sadece bir işlev neyin yanlış gittiğini tam olarak başarılı ya da başarısız ve bilmek gerekir
  3. Bir çok kez belirli bir hata kodu gerekmez, ancak belirli bir hata dize gerekir ve her olası hata durumu için bir hata kodu oluşturmak istemiyorum. Bazen gerçekten sadece bir "opfailed" kodunu kullanın ama dize kendisi kullanıcının uğruna bazı detaylara girmek istiyorum. Bu, esneklik sağlar
  4. Bana halletmek için ihtiyacı olan şeyi, her fonksiyonel alanını vermek için iki hata toplama yerleri (onlar hakkında kullanıcıyı söylüyorum modülleri render tarafından kullanılmak üzere arama algoritması ve küresel düzeyde kullanımı için yerel düzeyde) olması gerçekten çalıştı.

Ben bütün bunun üzerinden inşa kapsamlı bir istisna işleme mekanizması vardır Zend Framework gibi bir çerçeve kullanmak istiyorum.

exception handling içine bakmak ve error handling php kılavuzda. Ayrıca çok kullanışlı, altındaki yorumları okuyun.

Orada nasıl istisnalar içine PHP hataları dönüştürmek için bu sayfada açıklanan bir yöntemle aslo, yani sadece (çoğunlukla) istisnalar ile anlaşma.