İstisna nedir?
Hata, programın kendisi tarafından işlenemeyen beklenmedik bir program sonucudur.
Programı düzelterek hatalar çözülür. Bir hataya örnek, yürütmeyi asla durdurmayan sonsuz bir döngü olabilir.
Bir istisna, programın kendisi tarafından işlenebilen beklenmedik program sonucudur.
İstisna örnekleri, var olmayan bir dosyayı açmaya çalışmaktır.
Bu istisna, dosyayı oluşturarak veya kullanıcıya dosyayı arama seçeneği sunarak ele alınabilir.
Bu eğitimde öğreneceksiniz-
- Neden istisnayı ele alalım?
- PHP Hata işleme
- Hata işleme örnekleri
- Hatalar ve İstisna Arasındaki Fark
- Birden Fazla İstisna
- Kodu test etme
Neden istisnayı ele alalım?
- Sayfalarımızda son kullanıcılarımızı çok rahatsız edebilecek veya rahatsız edebilecek beklenmedik sonuçlardan kaçının
- Kötü niyetli kullanıcıların uygulamalarımıza saldırmak için kullanabilecekleri bilgileri ifşa etmeyerek uygulamalarımızın güvenliğini artırmak
- Php İstisnaları, tahmin edilebilir herhangi bir hata oluşursa bir programın normal akışını değiştirmek için kullanılır.
PHP Hata işleme
Bir hata oluştuğunda, konfigürasyon ayarlarınıza bağlı olarak, PHP, oluşan hatayla ilgili bilgilerle birlikte web tarayıcısında hata mesajını görüntüler.
PHP, hataları ele almak için bir dizi yol sunar.
Yaygın olarak kullanılan üç (3) yönteme bakacağız;
- Kalıp ifadeleri - kalıp işlevi yankı ve çıkış işlevini bir arada birleştirir. Bir mesajın çıktısını almak ve bir hata oluştuğunda komut dosyasının yürütülmesini durdurmak istediğimizde çok kullanışlıdır.
- Özel hata işleyicileri - bunlar, bir hata oluştuğunda çağrılan kullanıcı tanımlı işlevlerdir.
- PHP hata raporlama - PHP hata raporlama ayarlarınıza bağlı olan hata mesajı. Bu yöntem, hataya neyin neden olduğu hakkında hiçbir fikriniz olmadığında geliştirme ortamında çok kullanışlıdır. Görüntülenen bilgiler, uygulamanızda hata ayıklamanıza yardımcı olabilir.
Hata işleme örnekleri
Şimdi hata işleme rutinleri ile bazı basit örneklere bakalım.
Verileri depolamak için metin dosyalarını kullanan bir uygulama geliştirdiğimizi varsayalım. Verileri okumaya çalışmadan önce dosyanın varlığını kontrol etmek isteyebiliriz.
Aşağıdaki kod, yukarıdaki örneği uygular.
Simple_error.php dosyasını phptuts klasörüne kaydettiğinizi varsayarak, http: //localhost/phptuts/simple_error.php URL'sini açın.
Aşağıdaki sonuçları alacaksınız
Yukarıdaki sonuçlardan da görebileceğiniz gibi, uygulamamızın profesyonelce görünmemesine neden olur ve kullanıcıyı rahatsız edebilir.
Yukarıdaki kodu değiştireceğiz ve uygulama için bir hata işleyici yazacağız.
Yukarıdaki kodu error_handling.php olarak kaydettiğinizi varsayarsak, http: //localhost/phptuts/error_handling.php URL'sini açın.
Not: Bir mesajı "Dosya bulunamadı" gibi bir mesaj göstermek yerine yukarıda gösterilen gibi görüntülemek iyi bir güvenlik uygulamasıdır.
Özel bir hata işleyici kullanan başka bir örneğe bakalım.
Özel hata işleyici, varsayılan PHP hata işleme işlevi olarak ayarlanacak ve temelde bir hata numarası ve mesajı görüntüleyecektir.
Aşağıdaki kod, yukarıdaki örneğin uygulanmasını göstermektedir.
Http: //localhost/phptuts/custom_error_handler.php URL'sini açın, aşağıdaki sonuçları alacaksınız
.
Yukarıdaki örnekten de görebileceğiniz gibi, özel hata işleyicileri şu anlamda güçlüdür:
- Hata mesajlarını özelleştirmemize izin veriyorlar.
- Özel hata işleyici ayrıca bir dosyada / veritabanında hata günlüğü, geliştiriciye e-posta gönderme vb.
Şimdi üçüncü tür hata işlemeye bakalım. PHP yerleşik işlevi error_reporting işlevini kullanacağız. Aşağıdaki temel sözdizimine sahiptir
İŞTE,
- "Error_reporting", PHP hata raporlama işlevidir
- "$ Raporlama_düzeyi" isteğe bağlıdır, raporlama düzeyini ayarlamak için kullanılabilir.Hiçbir raporlama düzeyi belirtilmemişse, PHP php.ini dosyasında belirtildiği gibi varsayılan hata raporlama düzeyini kullanacaktır.
Raporlama Düzeyi | Açıklama | Misal |
---|---|---|
E_UYARI | Yalnızca uyarı mesajlarını görüntüler. Komut dosyasının yürütülmesini durdurmaz | error_reporting (E_WARNING); |
E_NOTICE | Bir programın normal yürütülmesi sırasında meydana gelebilecek veya bir hata olabilecek bildirimleri görüntüler. | error_reporting (E_ NOTICE); |
E_USER_ERROR | Kullanıcı tarafından oluşturulan hataları, yani özel hata işleyiciyi görüntüler | error_reporting (E_ USER_ERROR); |
E_USER_WARNING | Kullanıcı tarafından oluşturulan uyarı mesajlarını görüntüler | error_reporting (E_USER_WARNING); |
E_USER_NOTICE | Kullanıcı tarafından oluşturulan bildirimleri görüntüler | error_reporting (E_USER_NOTICE); |
E_RECOVERABLE_HATA | Önemli olmayan ve özel hata işleyicileri kullanılarak işlenebilen hatayı görüntüler | error_reporting (E_RECOVERABLE_ERROR); |
E_ALL | Tüm hataları ve uyarıları görüntüler | error_reporting (E_ ALL); |
Hatalar ve İstisna Arasındaki Fark
- İstisnalar atılır ve hatalar genellikle düzeltilemezken yakalanmaları amaçlanır.
-
İstisnalar, nesneye yönelik bir şekilde ele alınır.
Bu, bir istisna atıldığında anlamına gelir; istisna ayrıntılarını içeren bir istisna nesnesi oluşturulur.
Aşağıdaki tablo istisna nesne yöntemlerini göstermektedir
Yöntem | Açıklama | Misal |
---|---|---|
getMessage () | İstisnanın mesajını görüntüler |
getMessage();?> |
getCode () | İstisnayı temsil eden sayısal kodu görüntüler |
getCode();?> |
dosyayı al() | İstisnanın oluştuğu dosya adını ve yolunu görüntüler |
getFile();?> |
hat almak() | İstisnanın oluştuğu satır numarasını görüntüler |
getLine();?> |
getTrace () | İstisnadan önce bir geri izleme dizisi görüntüler |
getTrace());?> |
getPrevious () | Mevcut olandan önceki istisnayı görüntüler |
getPrevious();?> |
getTraceAsString () | İstisnanın geri izini bir dizi yerine bir dize olarak görüntüler |
getTraceAsString();?> |
__toString () | İstisnanın tamamını bir dize olarak görüntüler |
__toString();?> |
Aşağıda bir istisna atmak için temel sözdizimi verilmiştir.
İŞTE,
- "Fırlat", istisnayı atmak için kullanılan anahtar kelimedir
- "New Exception (…)" bir istisna nesnesi oluşturur ve mesaj parametresi olarak "Bu bir istisna örneğidir" dizesini iletir.
Yukarıdaki kod aşağıdaki mesajı verir.
Şimdi, istisnaları fırlat ve yakala uygulayan bir örneğe bakacağız.
Yukarıdaki örneği değiştireceğiz ve dene, fırlat ve yakala komutlarını dahil edeceğiz.
Aşağıdaki temel sözdizimine sahiptir.
İŞTE,
- "Dene {…}", potansiyel olarak bir istisna oluşturabilecek, yürütülecek kod bloğudur
- "Catch (Exception $ e) {…}", atılan istisnayı yakalayan ve istisna nesnesini $ e değişkenine atayan kod bloğudur.
Aşağıdaki kod, try, throw ve catch istisnasının uygulandığı temel istisna örneğini gösterir.
Program kasıtlı olarak daha sonra yakaladığı bir istisna atar.
getMessage();echo "";echo "getCode(): " . $e->getCode();echo "";echo "__toString(): " . $e->__toString();}?>
Http: //localhost/phptuts/exception_handling.php URL'sini açın Aşağıdaki sonuçları alacaksınız.
Ayrıca, atılan istisna türüne bağlı olarak bir php try ifadesi için birden fazla istisna oluşturmak da mümkündür.
MySQL, PHP veri erişimi hakkındaki makaleye bakın
… Birden çok istisnanın uygulama örnekleri içinBirden Fazla İstisna
Birden çok istisna, atılan istisnaları işlemek için birden çok try catch bloğu kullanır. Birden çok istisna şu durumlarda kullanışlıdır;
- Atılan istisnaya bağlı olarak özelleştirilmiş bir mesaj görüntülemek istiyorsunuz
- Atılan istisnaya bağlı olarak benzersiz bir işlem gerçekleştirmek istiyorsunuz
Aşağıdaki akış şeması, birden çok istisnanın nasıl çalıştığını göstermektedir
Birden çok istisna kullanan bir örneğe bakalım.
Bir sayıyı geçen paydaya bölen kodu değiştireceğiz.
İki tür istisna olmasını bekliyoruz;
- Sıfıra bölüm
- Negatif bir sayıya bölme
Basitlik uğruna, catch bloklarımızda yalnızca istisna türünü görüntüleyeceğiz.
Exception sınıfında yerleşik PHP, istisnaları atmak için kullanılır.
İstisna sınıfını genişleten ve bunları istisnalar atmak için kullanan iki sınıf oluşturacağız.
Aşağıdaki kod, uygulamayı göstermektedir.
Kodu test etme
Phptuts klasörüne multiple_exceptions.php kaydettiğinizi varsayacağız.
Http: //localhost/phptuts/multiple_exceptions.php URL'sine göz atın
PHP dosyasına geri dönün ve aşağıdaki şemada gösterildiği gibi parametre olarak -1'i geçirin.
Http: //localhost/phptuts/multiple_exceptions.php URL'sine göz atın .
Ne gibi sonuçlar alıyorsun? Parametre olarak 3'ü geçirin.
Ne gibi sonuçlar alıyorsun?
Özet
- Hatalar, PHP kodunun ürettiği beklenmedik sonuçlardır
- Hata işleme, uygulama performansını iyileştirir
- PHP, PHP'nin hataları bildirme şeklini özelleştirmek için kullanılabilecek yerleşik işlevlere sahiptir
- İstisnalar hatalar gibidir, ancak fırlatıldıklarında catch bloğu kullanılarak yakalanabilirler.
- Hata bilgilerini gösteren hata mesajlarının görüntülenmesi, kötü bir güvenlik uygulaması olarak kabul edilir.