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…