@ Ile raporlama PHP kaçan hata

4 Cevap php

Şu anda iş için bazı kod üstlenmeden ve "@" sembolü ile öneki bazı fonksiyon çağrıları rastlamak var. Anladığım kadarıyla, bu çağrı başarısız olursa raporlama PHP hatası kaçmak için tasarlanmıştır.

Şey iyi uygulama bu tür? Ben bir geliştirme ortamında mantığı anlamak ancak site üretim basıldığında tüm hataları düzgün yerine sadece kaçtı daha ele alınmamalıdır?

Bu sembolün kullanımı bu nedenle geliştirici tüm hata raporlama kaçar kaldırmak için bir sonraki aşamada kod ile sıralamak zorunda olduğu anlamına gelir.

Ben bu sembolleri kaldırmak ve sadece olası hataları veya işlemek için iyi bir yol bulmak için olup olmadığından emin değilim.

Netlik sağlamak için, bu kullanıldı işlev doğal PHP fsockopen() fonksiyonu oldu.

4 Cevap

Yani php kod rastlayabilirsiniz kötü uygulamalar arasında muhtemelen. Temelde hatalarını bastırmak ve sadece kod ne olursa olsun sonucu yapmak ne isterse yapmak denemek için tercüman söyler.

App ölçüde büyüdü kez Gececi fantom böcek avı içine kendinizi ve diğer takım arkadaşları sürüklemek için harika bir yoldur.

Deneyin-catch özel durum işleme ile gitmek için yoludur.

İşte error control operator denilen ve genellikle kullanmayı düşünün çok korkunç bir şey oluyor. Sorularınızı (emboldening benim) gelen bir uyarı:

Currently the "@" error-control operator prefix will even disable error reporting for critical errors that will terminate script execution. Among other things, this means that if you use "@" to suppress errors from a certain function and either it isn't available or has been mistyped, the script will die right there with no indication as to why.

Ben onlar başarısız olduğunda bir uyarı yükseltmek hem de yanlış dönen çünkü o,) fsockopen (gibi işlevleri çağırmak için @ kullanmak bazen anlaşılabilir olduğunu düşünüyorum.

Eğer bu aramalar düzenli başarısız bekliyoruz ve bu nedenle bir uyarı yükseltilmiş olması istemediğiniz durumlar olabilir. Açıkçası üretim uyarılar görüntüleniyor olmamalıdır ve bunları yerine giriş olmalı, ama hala tam günlükleri almak durdurmak için @ operatörü kullanmak isteyebilirsiniz. Sen error_reporting ayarını değiştirerek tüm rapor alma uyarıları durdurmak olabilir ama bu ideal değildir.

"@" Operatörünü kullanarak çok faydalı olduğunda know işlev çağrısı, örneğin, fsockopen çağrı gibi, başarısız olabilir. En iyi uygulama aradığınız işlevi genellikle başarısız olur ve uygulamada geçerli bir durum olduğunda bu kullanmaktır. Ayrıca, kesinlikle onu çağırdıktan sonra işlevin dönüş değerini kontrol etmelisiniz:

$fp = @fsockopen($hostname, $port);
if ($fp === false) {
    // handle connection failure
}
else {
    // handle connection success
}

Iki şey kaçınmalısınız:

  1. Dönüş değeri kontrol etmiyor;
  2. Yerel bir dosyayı açmadan veya başlıkları gönderirken - örneğin bir hata beklemeyin "@" operatörünü kullanarak. Yerel bir dosyayı açarken is bir hata ve düzgün ele alınması gerektiğini, başarısız olur.

Note: de set_error_handler() bakmak isteyebilirsiniz