

Php İf/Else Ve Switch/Case Kullanımı -- Farklı Döküman
-
Bir çoğunuz if/else ve switch/case kullanmayı biliyordur.Ben bilenlerede, bilmeyenlerede bazı inceliklerini anlatmak istedim.Örneğin if/else te süslü parantezleri ({}) kullanmaya bilirsiniz !!
Madem kullanmayabiliriz neden öyle yazıyorlar ?
Çünkü bazı durumlarda kullanmayabiliriz.Örneğin bir değişkenimiz var ve tek mi çift mi diye yazdıracağız.İşte burada tek ifade için kullanmamıza gerek yok.
İfade (statement) nedir ?
echo 'bu bir ifadedir';
Php yada c tabanlı dillerde ifade sonuna ; koyarız.O ifade biter.
echo 'ayrox';exit;
yukarıda iki ifademiz var.Bir tanesi echo, diğeri exit.Sonlarına ; koyduk.Her ifadeden sonra noktalı virgül (;) koyuyoruz.İf ve else lerden sonra süslü parantez kullanmazsak ilk ifade işleme konur.Hemen örnek yapalım;<?php
$s=30;
if($s % 2 == 0)
echo $s.' sayısı çifttir';
else
echo $s.' sayısı tektir';
?>gördüğünüz gibi kod çalışacaktır.else if'tede aynı şey geçerli.Eğer { ve } kullanmazsak sonraki ilk ifade işlettirilecektir.Peki ikinci ifade ne olur ? Deneyelim;
<?php
$s=31;
if($s % 2 == 0)
echo $s.' sayısı çifttir';
echo 'bu if'e ait 2. ifade';
else
echo $s.' sayısı tektir';
echo 'bu else'e ait 2. ifade';
?>Parse error: syntax error, unexpected T_ELSE in /var/www/lab/c.php on line 6
gördüğünüz gibi syntax error verdi.C'de böyle yaparsanız ikinci ifadeler ana programa ait gibi görünür fakat phpde syntax error veriyor.
İf-else ve Switch-case Performans
Php performans , performansli ve profesyonelce kod yazmak/ yazılarında sanıyorum bahsetmiştim.Fakat tekrar bahsetmek istiyorum.
Bilgisayarlar adım adım yol alır.Bunu bilirsek kodlarken daha güzel bir kodlama yapabiliriz.Switch-case ile tek sayfada işlemler yapalım.
site.com/index.php?sayfa=anasayfa
site.com/index.php?sayfa=hakkimizda
site.com/index.php?sayfa=dokumanlar
olsun.Şimdi buna uygun switch-case yapısı yakalayalım.switch($_GET['sayfa']){
case 'hakkimizda';
//burada hakkımızdaya ait kodlar ve yazıla
break;
case 'dokumanlar';
//burada dökümanlara ait kodlar ve yazıla
break;
default:
/*Burada ise anasayfa kısmı.Yani dokumanlar veya hakkimizda değilse gösterilecek olan kodlar.*/
}Bir çoğumuz böyle yapıyor.Burada bilgisayar şöyle işler; önce sayfa değişkeni hakkimizda mı diye bakar, değilse dokumanlar oda değilse default: kısmındaki kodlar gösterilir.Gördüğünüz gibi o değilse alttaki, o değilse alttaki.Bunu fazla switch-case 'e uyarlarsak ve performans istersek birazcık değişiklik yapmamız gerekiyor.
Mantıken anasayfa en son bakılan yer olacaktır çünkü default.Ben AyroxBlog'ta bunu birazcık değiştirdim ve ilk bakılan yaptım.İlk bakılanı if/else ile yaptık.Alttaki kodumuzda onu göreceksiniz.
Fakat dikkatinizi çekmek istediğim nokta hakkimizda ve dokumanlar.Blogta dokumanlar yerine yazilar olur.Başka sitede başka birşey.Şimdi burada amaç en çok kullanılandan en az kullanılana doğru hiyerarşik yapı oluşturmaktır.
Analytics'e ve benim istatistiklerime göre en çok kullanılandan en az kullanılana doğru sıralama yaparsak : index.php, bilgi (yani hakkımızda), kosul (kullanım koşulları), etiketler, yazi, kategori.... şeklinde sıralanıyor.Fakat en başında index.php var.Yani default kısmımız en çok sıralanan.
Şimdi if-else ile default: kısmını direkt başa alalım sonra switch-case ile yukarıdaki hiyerarşiye göre bir sıralama yapalım.Tabi benim birazcık farklı $seo['2'] vs.. yaptım AyroxBlog gibi seo konusunda anlattım.
Ben kolay örnek olması için yukarıdakini değiştirip yazacağım;if(empty($_GET['sayfa'])){
/* burada default: kısmında hangi kodlar varsa aynen yapıştırın.
dikkat etmeniz gereken nokta, ileride default: kısmında birşey değiştirirseniz buradaki kodlarıda değiştirmelisiniz*/
}else{
switch($_GET['sayfa']){
// şimdi çok kullanılanlara göre sıralıyoruz.Bilgi, kosul, etiketler, yazi, kategori idi.
case 'bilgi';
// bilgi kısmına (hakkımızda) ait kodlar.
break;
case 'kosul';
// kosul (kullanım koşulları) ait kodlar.
break;
case 'etiketler';
// etiketler kısmına ait kodlar.
break;
case 'yazi';
// yazilara (blog yazıları) ait kodlar.
break;
case 'kategori';
// kategoriye ait kodlar.
break;
default:
/*burasıda yukarıdakiler değilse gösterilecek kısım.
Peki neden yukarıda boşsa dedikten sonra burada da yazdık ?
Çünkü adam sayfa=adsf yazarsa yine anasayfaya gitsin.Tabi bune ya böyle birşey yok demek isterseniz onu yazın.
Ben kendi blogumdaki gibi yaptım */
}
}Gördüğünüz gibi bilgisayar tek tek bilgi, kosul, etiketler, yazi, kategori olup olmadığına baktıktan sonra anasayfa'ya ait kodları vermek yerine, direkt anasayfa'ya ait kodları verecek.Tabi boş ise.
Eğer $_GET['sayfa'] değişkeni boş değilse sırasıyla bilgi, kosul, etiketler, yazi, kategori olup olmadığına bakacak.Eğer birisine uyuyorsa ondan sonrakileri atlayacaktır.
İf Else Nasıl Olur?
Eğer switch-case ile değil if-else ile yapsakta aynı şekilde olacaktı.Yani;if($_GET['sayfa']=='bilgi'){
//bilgi kodları
}else if($_GET['sayfa']=='kosul'){
//kullanım koşullarına ait kodlar
}// tek tek diğerleri (yazmıyorum) ve sonunda else;
else{ // buradaki else switch'teki default
//anasayfaya ait kodlar
}Burada da tek tek $_GET['sayfa'] bilgi, kosul vs.. diye bakacaktı.Bunda da hiyerarşik yapı kullanınız.En çok kullanılanı en başa, en az kullanılanı en sona atın.
Bilgisayar'ın okuma şeklini biraz daha açalım
Şimdi switch-case yada if/else kullanımında önceliği
bilgi
kosul
etiketler
yazi
kategori
şeklinde verirsek bilgisayar önce değişkenin eşitliğine bakacak.Şöyle bakacak;
$_GET['sayfa'] değişkeni bilgi ise alttakileri görme;
bilgi değilse, kosul'a bak, eğer kosul'sa alttakileri görme;
kosul değilse etiketler'e bak, etiketler ise alttakileri görme;
etiketler değilse yazi'ya bak, yazi ise alttakileri görme;
yazi değilse kategori'ye bak, kategori ise alttakileri görme;
kategori değilse altında default: yada else olacağında o kısmı al.
Genel olarak mantığı bu.Bu şekilde tek tek gideceğinden fazla satırlı kodlarda azda olsa performans sağlayacağını düşünüyorum.
Ufak bir bilgi : Eğer switch-case 'de break; kullanmazsak alttakileri olduğu gibi okur.<?php
$s=1;
switch($s){
case 1;
echo 'değişken 1 dir';
case 2;
echo 'değişken 2 dir';
default:
echo 'değişken 1 yada 2 değildir';
}
?>$s=2 ve $s=3 vererek sonuçları görebilirsiniz.Bu yüzden break; kısmını unutmayın.Tabi bazı yerlerde break kullanmamak işimize gelebilir.
------
İf/else ve switch/case kullanımına ait bir sürü döküman bulabilirsiniz.Fakat ben birazcık daha farklı yanını göstermek istedim.Yeniler için veya bilmeyenler için farklı bir döküman olabilir.Tahribata özel : yazıyı kendi blogum ve başka sitede yayınladım.Döküman kendi dökümanımdır.Farklı olduğuna, bir çok kişinin bilmediği yanlar olduğunuda düşünüyorum.Bu yüzden tahribatta da yayınlayayım dedim.
bloguma ait linkler var, onlarıda kaldırmayayım dedim yararlanan olursa buyurabilir.Sevgiler, saygılar :)
anlamadığınız, takıldığınız yer varsa mesajları bekliyorum.
-
sağol hocam yeni başlayanlar için güzel ben bunları biliyorum ancak,döngülerde biraz problemim var onlarla ilgilide bir doc. hazırlarsan cok sevinirim.
-
tamam hoca onlar konusunda da yazayım.
if/else ve switch/case lerde özellikle öncelik konusunda birşeyler bilmek isteidm.Bir çok kişinin switch-case ve if-else if-else kullanırken önceliğe dikkat etmediğini düşünüyorum.amacım performanstı, ayroxblog'ta uygulamaya çalışıyorum.Bu günlerde biraz karıştı ama yeniden yazacağım o zaman daha hızlı oalcak.Şimdi de yazarken yukarıdakilere dikkat ederek yazdım.
Bir çok yerde de
if()
ifade;olarak kullandım.Eğer tek satırsa süslü paranteze gerek yok.
Neyse döngülerde de bir ara yazarım birşeyler
-
yukarı atayım da son bi kez ne olur ne olmaz
-
Faydası olabilir;
http://tr.php.net/manual/tr/language.control-structures.php
-
eyw saolasın.AYrıyetten şöyle birşeyde varmış bilmiyordum ;
$s = 30;
echo ($s % 2 == 0) ? "bu sayı çift" : "bu sayı çift değil";