Php’ de Dizi Sorgulamasında Performans
Tarih: Haziran 29th, 2009 | Yazar: Ertuğrul Erkan | Kategori: Php | Etiketler: die();, foreach, performans, php, php de performans, php diziler, php komut | 2 Yorum »Merhaba arkadaşlar. Php de Performans isimli yazımda sizlere genel hatları ile nasıl daha sağlam sistemler elde ederiz konusunda bilgiler vermiştim. Fakat bazı durumlar oluyor ki genel hatlar dışında da bilmek gereken noktalar lazım oluyor. Özellikle Php nin yapı taşı olan diziler konusunda yapılacak teknikler mevcut…
Birçok dilde veri tiplerini belirtebiliyoruz. Fakat Php de bu tam olarak mevcut değil. Veri tiplerinden kastım; string, int, array gibi sayı mı yoksa metin mi yoksa dizi mi olduğu. Bu diller bilgileri saklarken ram üzerinde belirli bölmeler yaratırlar ve katagorize ederek verileri yerleştirirler. Yalnız Php’ de her string bir dizi şekline gidilmiş. Yani bir; $veri = "veri"; dediğimizde echo $veri[0]; yaparsak v yazacaktır…
Genelde diziler verileri saklamak için kullanılan ideal veri tipleridir. Fakat dizileri sorgularken sürekli baştan başa dönmesi bize gereksiz bir performans kaybı sağlayacaktır. Foreach veya For döngüleri hep dizileri baştan sonuna kadar götürür. Mesela şöyle bir sorgulama yapsak;
<?php
$veri = array("veri1","veri2","veri3");
foreach($veri as $tek) {
if($tek=="veri2") {
echo "bulundu";
}else{
echo "bulunamadı";
}
}
?>
Bir defa bulundu, iki defa bulunamadı yazacaktır. Halbuki bulunduğu noktada döngüyü kesse gerisindeki verilerin sorgulanmasına gerek kalmayacaktı. Bu sayede performans elde edilecekti. Tabi 3 tane veri sorgulamakta elde edilen sonuçlar pek değişmez ama binlerce rakam döndüğünü düşünsenize. Belkide ilk sırada gerekli veri yer alıyor ve devamına hiç gerek yok!
İşte bu gibi durumlar için Php geliştiricileri bizlere script’ in geri kalanını öldürmemizi söylüyorlar. Yani;
<?php
$veri = array("veri1","veri2","veri3");
foreach($veri as $tek) {
if($tek=="veri2") {
die("bulundu");
}else{
echo "bulunamadı";
}
}
?>
Arkadaşlar dikkat ettiyseniz burada die(); komutu devreye giriyor. Türkçesi de öldür demek zaten. Dizi de gerekli veri bulunduğu anda if true yani doğru düşürecektir ve die sayesinde tekrar sorgu yapılmayacaktır. Fakat bu sorguda bir defa bulunamadı, bir defa bulundu yazacaktır. Halbuki biz bulunduğu taktirde sadece bulundu, bulamadığı taktirde de bulunamadı yazsın demesini istiyoruz. Şimdi mantığına bir bakalım;
Die(); komutu çalıştığı anda ondan sonra gelen tüm sorgular öldürülüyor değil mi? O zaman;
<?php
$veri = array("veri1","veri2","veri3");
foreach($veri as $tek) {
if($tek=="veri2") {
die("bulundu");
}
}
echo "bulunamadı";
?>
Arkadşalar burada sorgu dönüyor, dönüyor; her seferde bir alt satıra geçiliyor. Die komutu görüldüğü anda komut öldürülüyor ve echo “bulunamadı”; komutu çalışmıyor. Fakatt eğer ki if sorgusu hiç true düşmezse alt satırdaki bulunamadı yazdırılıyor. İşte hepsi bu…
Velhasıl böyle komutların hepsini bilmek gerek. Gereksiz yere binlerce satır çevirilmesi yerine gerektiği yerde sistemi kapatmak en doğrusu. Die(); genelde scriptin ondan aşağısındaki bütün fonksiyonlarını öldürdüğü için pek kullanılmaz. Fakat böyle bir döngü kullanmak istiyorsanız vazgeçilmesi…
Herkese iyi günler, iyi çalışmalar…
Benzer Yazılar;
- Php ve Diziler
- Örnek Mysql Sınıfı: BmySql Class v1.5
- Php ile Nesnel Programlama - 2
- Uzak Mysql Bağlantısı
- Php de Sql İnjection Açığı Nedir? Nasıl Korunulur?

@EeTr : Burada die tüm betiğin çalışmasını durduracağı için senin de dediğin gibi pek tercih edilmez. Die tüm betiğin durdurmak istediğimiz zamanlarda işimize yarar. Ama döngüleri durdurmak için break; kullanımı daha uygundur. Bu sayede tüm betiği durdurmuş olmayız.
Evet zaten belirtmiştim. Yalnız bazı durumlar oluyor; özelliklede güvenlik ihlaleleri gibi. O zaman durdurmak en yararlısı çünkü ufacık bir kod bile bütün veritabanını dağıtmaya yarayabilir…