- Konu sahibi
- #1
PHP'de
En basit kullanım şöyledir:
Çıktı
Örneğin bir dosyayı okumadan önce dosyanın gerçekten var olup olmadığını kontrol edebilirsiniz:
Bu yalnız normal dosyanın varlık kontrolüdür; dosyanın içeriğinin okunabildiğini kanıtlamaz. Bu örnekte dosya yoksa
İlk çalıştırmada beklenmeyen biçimde
Aynı amaçta görünseler de kullanım alanları farklıdır:
Sonlandırma sırasında kayıtlı shutdown işlevleri ve nesne yıkıcıları yine çalışabilir. Bu, die satırından sonraki normal kodun devam edeceği anlamına gelmez; kapanış işlemleri ayrı bir aşamadır. Kaynakları düzenli yönetmek için bu yaşam döngüsünü de dikkate alın.
Çünkü
Hayır. Tamsayı argümanı işlem çıkış durumudur; metin argümanı ise çıktı üretir.
die, exit’in takma adı olan betik sonlandırma işlemidir. Metin argümanı verilirse onu çıktı olarak üretir. die ile exit aynı işlemi yapar; Bu, ayrı bir hata yönetim sistemi değildir. PHP 8.4 ve sonrasında exit/die normal işlev davranışına sahiptir; daha eski sürümlerde dil yapısı olarak değerlendirilir.En basit kullanım şöyledir:
PHP:
<?php
die('İşlem durduruldu.');
echo 'Bu satır çalışmaz.';
Çıktı
İşlem durduruldu. olur ve echo satırına geçilmez.die nasıl çalışır?
die('mesaj') biçiminde kullanıldığında mesajı üretir ve betiği sonlandırır. Genellikle beklenen bir ön koşul sağlanmadığında, dosya bulunamadığında veya geliştirme sırasında hızlı teşhis gerektiğinde kullanılır.Örneğin bir dosyayı okumadan önce dosyanın gerçekten var olup olmadığını kontrol edebilirsiniz:
PHP:
<?php
$dosya = __DIR__ . '/kontrol.txt';
if (!is_file($dosya)) {
die('Kontrol dosyası bulunamadı.');
}
echo 'Dosya bulundu.';
Bu yalnız normal dosyanın varlık kontrolüdür; dosyanın içeriğinin okunabildiğini kanıtlamaz. Bu örnekte dosya yoksa
die mesajı gösterilir ve Dosya bulundu. yazdırılmaz. Dosya mevcutsa koşul sağlanmaz ve betik normal şekilde devam eder.Çalıştırılabilir en küçük deneme
- Yukarıdaki kodu
kontrol.phpadıyla kaydedin. - Dosyanın bulunduğu klasörde terminal açıp
php kontrol.phpkomutunu çalıştırın. - Dosya yoksa
Kontrol dosyası bulunamadı.çıktısını bekleyin. - Aynı klasörde
kontrol.txtadlı boş bir dosya oluşturup komutu tekrar çalıştırın. - Bu kez
Dosya bulundu.çıktısı alınırsadiesatırına girilmemiş demektir.
İlk çalıştırmada beklenmeyen biçimde
Dosya bulundu. çıktısı alıyorsanız dosya adı ve klasör yolunu kontrol edin. Dosya oluşturulduktan sonra hâlâ hata mesajı görülüyorsa PHP işleminin dizine erişimini ve __DIR__ değerinin beklediğiniz klasörü gösterip göstermediğini inceleyin.die, exit, return ve throw farkı
Aynı amaçta görünseler de kullanım alanları farklıdır:
| Yapı | Etkisi | Ne zaman tercih edilir? |
|---|---|---|
die | Betik çalışmasını sonlandırır | Basit durdurma veya hızlı teşhis |
exit | Betik çalışmasını sonlandırır | Daha açık ve genel sonlandırma ifadesi gerektiğinde |
return | İçinde bulunduğu fonksiyondan veya dosyadan döner | Çağıran akışın devam etmesi gerektiğinde |
throw | Yakalanabilecek istisna oluşturur | Uygulamanın merkezi hata yönetimi varsa |
die kullandığınızda çağıran kodun hatayı ele almasını bekleyemezsiniz; işlem doğrudan sonlanır. Bu nedenle küçük betiklerde veya kesin olarak devam edilmemesi gereken kontrollerde pratik olsa da, kullanıcıya sunulan büyük uygulamalarda her hatayı die ile göstermek uygun değildir. Kullanıcıya bozuk veya teknik hata metni göstermek yerine uygulamanın hata yönetimi, günlükleme ve uygun HTTP yanıtı tercih edilmelidir.Sık yapılan hatalar
-
diekomutunutry/catchyerine kullanmak:dieyakalanabilir bir istisna üretmez; akışı sonlandırır. - Kullanıcı girdisini doğrudan hata mesajına eklemek: Mesajda hassas bilgi, dosya yolu veya veritabanı ayrıntısı göstermeyin.
- Her başarısız işlemde
dieçağırmak: Üretim uygulamasında merkezi hata yönetimi ve kullanıcı dostu hata sayfası daha uygundur. -
or die(...)kalıbını düşünmeden kullanmak: Bu kalıp yalnızca önceki ifadenin başarısız sonucunda durur; her hata türünü otomatik olarak yönetmez.
Sık sorulan sorular
die mesajı neden tarayıcıda doğrudan görünüyor?
Çünkü
die verilen metni çıktı olarak üretir. Bu davranış normaldir; son kullanıcıya gösterilecek hata için uygulamanın kendi hata sayfasını oluşturmanız gerekir.die(1) ekrana 1 yazdırır mı?
Hayır. Tamsayı argümanı işlem çıkış durumudur; metin argümanı ise çıktı üretir.
die(1) ile die("1") bu yüzden farklıdır. CLI çıkış kodunu HTTP durumuyla da karıştırmayın; web yanıtında uygun hata durumunu ayrıca belirlemek gerekir.