Istisnalar ve hatalar arasındaki fark?

3 Cevap php

Bir hata, bir istisna arasındaki fark nedir?

Ben online ve kitap bir çift sayıda kaynak okudum, ancak sağlanan açıklamalar çok kapsamlı değildir. Gibi, ben yine karıştı.

Teşekkürler!

Edit: It looks like I asked two questions which was probably confusing. The main question that I wanted an answer to is the difference between errors and exceptions. So, I have edited the above to be more specific. Thanks everybody for your answers.

3 Cevap

Hata işleme yapmak için "gereken" veya "iyi" yolu yoktur.

Genel olarak konuşursak, hata iki türü vardır

  1. Programın diğer bölümleri tarafından ele olanlardır. Kullanıcının gördüğü veya bu hataları bilir, en azından doğrudan bir şekilde olmadı.
  2. Bu hangi kullanıcı gibi bilgilendirilmesi gerekmektedir yeterince başarısızlık neden olmuştur.

Bunların hiçbiri hataları işlemek için kullanmak istediğiniz belirli PHP mekanizmaları ile ilgisi var olduğunu fark.

If you use exceptions... Then I recommend using exceptions across the board. Register an exception handler and let it do most of the work - including other PHP errors. Invalid login details?

class InvalidLoginException extends Exception
{
  protected $message = 'Login information is incorrect. Please try again.';
}

Sonra uygulama için seçimler bir grup var.

try {
  $user->login(); // will throw and InvalidLoginException if invalid
}
catch ( InvalidLoginException $e )
{
  // display an error message
}

Bunu seçerseniz Veya, durum işleyicisi yapalım. Hatta belki bir daha esnek bir şekilde

class ApplicationErrorException extends Exception{}
class InvalidLoginException extends ApplicationErrorException 
{
  protected $message = 'Login information is incorrect. Please try again.';
}

Sonra, durum işleyici

if ( $exception instanceof ApplicationErrorException )
{
  // dislpay error message
}

Ama istisnalar tek yolu değildir, ve by some not even considered a good way.

Ne. İstisnalar ve Hatalar code Yanlış bir şey yaptığında içindir. Kullanıcı daha fazla ya da daha az hatalı oturum açma bilgilerini girmesi bekleniyor. Kullanıcı adı / şifre değilse, $_GET['failed'] ayarlanırsa (header('location:login.php?failed=1');) ve daha sonra, bir mesaj görüntüleyebilir arka giriş sayfasına kullanıcı yönlendirme, doğru olup olmadığını kontrol edin. Bu kolay yol olurdu.

Istisnalar / hataları ile ilgili olarak ... genellikle istisnalar ayrılmamak gerekir. Sen bir istisna, ve sonra onu yakalamak ve onunla başa. I trigger_error geri bir catch bloğunda hatayı nasıl işleneceğini bilmiyorum istemci hata propaganda için daha fazla olduğunu düşünüyorum.

Bir kere, istisnalar script yürütülmesine devam edebilirsiniz. Ayrıca, trigger_error her satır bildiriyor ve bu trigger_error çağrıldı dosya.