Yakalanan ve yakalanmamış İstisnaları açılıyor?

4 Cevap php

Ben son zamanlarda İstisnalar ile çalışıyoruz. Büyük ölçüde sadece İstisna günlüğüne bakarak kaynağındaki olası sorunlara dikkat çekmek için geliştiriciler yardımcı olur çünkü o yakalanmamış İstisnalar oturum mantıklı düşünüyorum. Bir istisna ile dağıtılır Ancak, artık bunu açmak için bir ihtiyaç var mı? Evet, bir ölçüde. Sadece İstisnalar böcek "away" gitmek yapacak alıcı tarafından daha sonra, hata kod yazmaya "kötü" geliştiriciler varsa. Örneğin:

try
{
 fopen('/path/to/file','w');
}
catch (Exception $e)
{
 // Display an error to user
}

Yukarıdaki kod PHP. Noktası kodu bu tür, imo, yok etmelisiniz. İstisnalar müstesna olmak ve nadiren meydana geliyordu, ama bu kod ile nadiren daha fazla meydana vardır. Örneğin, dosya varsa geliştirici kontrol etmez ve o yazma izinleri varsa o kontrol etmez. Bunun yerine, bu olmalıdır:

try
{
 if (file_exists('/path/to/file') && is_writable('/path/to/file'))
  fopen('/path/to/file','w');
 else
  // Display an error to user about file not existing or not being writable
}
catch (Exception $e)
{
 // Display an error to user about an unexpected error
}

Bu şimdi hemen hemen mantıklı. Istisna (örneğin sunucu çökmesi, elektrik kesintisi, ne olursa olsun) atılan ve olağanüstü yalnızca yakalandı. Geliştirici şeyi ve atlar kontroller için İstisnalar kullandığı Ama ne - beni yakaladı istisnalar giriş için bir yol var?

Ben sorunları "çözmek" için try-catch blokları her şeyi koymak geliştiriciler istemiyorum. Vb donanım hatası, sunucu çökmesi gibi olağanüstü durumlar için istisnalar bırakın - Ben onlara açıkça onlar kontrol ne olursa olsun, kontrol etmek istiyorum

4 Cevap

Ben sizin için ne arıyorsanız eğer sihirli bir yöntem türü yaklaşım var olduğunu sanmıyorum. Ama bir try... catch... yapısında tüm app sarmak mümkün mü? Tanım olarak, en dış olsun herhangi bir istisna try... catch... yakalanmamış ... ya ben noktayı eksik ;-)

İstisnalar müstesna olmak ve nadiren meydana geliyordu, ama bu kod ile nadiren daha fazla meydana vardır.

Ben bir yanlış olduğunu düşünüyorum. Istisnalar noktası hata işleme akışından ideal akışını ayırmaktır.

PHP'nin set_exception_handler işlevini kullanabilirsiniz, bu tüm yakalanmamış istisnaları yakalamak bir işlevi tedarik izin verir ancak komut yakalanmış olan tüm olanlar için manuel günlüğe eklemek gerekecek.

Ben sadece kod sertleşmesine için geçerli bir yol olarak istisna benimsemesi gerektiğini troelskn yorumuna katılıyorum.

Eğer hala yakalanmamış istisnalar giriş istiyorsanız, tüm geliştiricilerin bir günlük işlevi (örn. log_exception($e)) onları geçmek ya da üst düzey bir try / catch ve günlüğüne hepsini yakalamak sahip olurdu Onları orada. Ayrıca PHP_CodeSniffer İlk örnekte olduğu gibi yazılı bir kod tespit etmek gibi bir araç kullanabilirsiniz, ama harika bir çözüm değil. Bu davayı algılamak için kendi sniff'ini yazmak gerekiyordu; herhangi bir if ifadeler içermeyen bir try bloğu için bakmak olabilir.