Switch Komutunun Fonksiyonlar Icinde Kullanilmasi
Bir onceki konuda yaptigimiz ornegi biraz daha gelistirelim ve sizlere "switch" komutu ile istediginiz bir fonksiyonun nasil secilebilicegini gosterelim.
Hatirlayacaginiz gibi "switch" komutuyla degisik kosullar arasindan programin bizim icin bir secim yapmasini sagliyorduk.Gene ayni mantikla her durum icin bir fonksiyonun calistirlmasini saglayabiliriz.
Simdi uygulamamizi biraz gelistirelim.
switch ($Sehir)
{
case"Istanbul":
echo (Turk_Lirasi_Hesapla($ParaMiktari));
break;
case "Newyork":
echo (Amerikan_Dolari_Hesapla($ParaMiktari));
break;
case "Paris":
echo (Fransiz_Frangi_Hesapla($ParaMiktari));
break;
default:
echo $ParaMiktari;
break;
}
function Turk_Lirasi_Hesapla ($ParaMiktari)
{
Turk Lirasi olarak hesaplanir ve deger dondurulur
}
function Amerikan_Dolari_Hesapla ($ParaMiktari)
{
Amerikan Dolari olarak hesaplanir ve deger dondurulur
}
function Fransiz_Frangi_Hesapla ($ParaMiktari)
{
Fransiz Frangi olarak hesaplanir ve deger dondurulur
}
HTML'nin HIDDEN kontrolleri ile formdan kullanicinin yaptigi secimler bu sekilde PHP sayfasina ulasitirilarak "switch" yapisinin en uygun sekilde kullanimi saglanabilir.Bu konuya ileriki yazilarimizda deginecegiz.
Degiskenler'e fonksiyonun dondurdugu degeri atamak
Bu islemi bir adimda kolayca gerceklestirebiliriz.Asagidaki kodu inceleyin,
$HitSayaci = hit_sayisi ();
Burada degiskenimiz gordugunuz gibi $HitSayaci'dir.Bu degisken icerisinde otomatik olarak fonksiyonun dondurdugu deger saklanir.Ardindan eger isterseniz "switch" komutunu kullanarak kolayca istediginiz sartlarin kontrolunu saglayabilrsiniz.Bir ornek vermek istersek,
switch ($HitSayaci)
{
case (HitSayaci<100):
echo "Bu hafta cok fazla hit almadik";
break;
case (HitSayaci<1000):
echo "Bu hafta normal hit aldik";
break;
case (HitSayaci<10000):
echo "Bu hafta cok fazla hit aldik";
break;
}
Yukaridaki kod parcasini biraz aciklamak istersek,
$HitSayaci degiskeni icerisinde hit_sayisi () fonksiyonunun dondurdugu deger saklanmaktadir.Bu deger "switch" komutu ile test edilmektedir.mesela fonksiyonumuzdan 150 gibi bir deger donduruldu ise $HitSayaci = 150; olacaktir."switch" komutu bu degeri "case" ile verilen durumlarin hangisine uydugu konusunda test edecektir.Bu durumda ekranda " Bu hafta normal hit aldik" yazisi gorunecektir.
Degerlerin Fonksyiona Gecirilmesi
Simdiye kadar olan kisimda sizlere fonksiyonlarin "parametreleri" nasil kullandigini acikladik.Eger bir tek "parametre" fonksiyona islenmesi icin gonderiliyorsa bu "parametreye" ozel olarak "argument" adi verilir.Genel olarak "argument"ler fonksiyona,fonksiyonun cagrilmasi sirasinda gonderilir."Parametreler" ise fonksiyonun icerisindeki kod govdesinde yer alan degiskenlerdir.Argumentlerin fonksiyona gecisi icin iki yol vardir.Asagida bu iki yolda aciklanmaya calisilmistir.
Deger Olarak Gecirilmesi
Bu yol zaten yazi dizisinin basindan beri anlatmaya calistigimiz yoldur.Ilk bolumde verilen "vergi" ornegini burada yazip aciklamak istersek,
function vergi($Geliriniz)
{
$Geliriniz = $Geliriniz - (($Geliriniz/100)*20);
return $Geliriniz;
}
$Geliriniz = 2500;
echo (vergi($Geliriniz)); // Bu satir 2000 olarak goruntulenir.
echo $Geliriniz; // Bu satir 2500 olarak goruntulenir.
Echo komutu ile goruntulenen degerler birbirinden farkli olacaktir.Ustteki satirda fonksiyonun "return" komutunu kullanarak dondurdugumuz degeri echo edilecek,Alttaki satirda ise direkt olarak $Geliriniz degiskenin sahip oldugu deger goruntulenecektir.
Bu sekilde argument degerini fonksiyona gecirmek "passing by value" olarak isimlendirilir.
Referans olarak Gecirilmesi
Simdiye kadar olan orneklerde hic gormedigimiz ve "passing by reference" olarak adlandirilan bu metodu kulllanmak icin degiskenin onune bir "&" ampersand isareti eklenir.Bu metodla degiskenin degeri fonksiyon icersinde degistirilir.Yukaridaki ornegimiz icin bu metodu kullanarak degiskenimizi fonksiyona gecirelim,
function vergi(&$Geliriniz)
{
$Geliriniz = $Geliriniz - (($Geliriniz/100)*20);
return $Geliriniz;
}
$Geliriniz = 2500;
echo (vergi($Geliriniz)); // Bu satir 2000 olarak goruntulenir.
echo $Geliriniz; // Bu satir 2000 olarak goruntulenir.
Ornegi incelediginizde goreceginiz gibi "&" amperasand isaretini fonksiyona gecirilen degiskenin onune koyduk.Bu sekilde fonksiyona giren degiskenin dondurdugu deger,daha sonra fonksiyon disinda kullanildigi zaman da fonksiyonun dondurdugu degerle ayni oldu.
Yani $Geliriniz degiskeninin asil degeri fonksiyonda islemlerden sonra degismistir.Artik $Geliriniz degiskeninin degeri 2000 dir.
Parametreler icin default deger belirlenmesi
Fonksiyon icinde kullanilan parametre icin default bir deger belirleyebilirsiniz.
Ornek vermek istersek,
function vergi($Geliriniz=2500)
{
$Geliriniz = $Geliriniz - (($Geliriniz/100)*20);
return $Geliriniz;
}
Bu su anlama gelmektedir.Eger bir degeri fonksiyona saglamazsaniz ve fonksiyonu bu sekilde default degeri ile calistirmak isterseniz yanlizca fonksiyonu asagidaki sekilde yazip cagirabilrisiniz.
vergi ();
Fonksiyon artik otmatik olarak 2500 degerine gore calisacaktir.
Bununla beraber eger bir degeri sonradan saglarsaniz o zaman default degeriniz gozardi edilerek sagladiginiz yeni deger isleme konulur.
vergi (3000);
Artik 2500 degeri yerine 3000 degeri kullanilacaktir.
Parametreler ile ilgili birkac not
Fonksiyon icinde gerekli butun argument degerlerini veya fonksiyon icinde kullanilan bir parametreyi vermeden fonksiyonu calistirirsaniz bu degerler sizin icin "0" olarak kabul edilip isleme devam edilecektir.
Bu su demek eger fonksiyonda iki degiskeniniz var ve siz bir tanesini sagliyor digeri icin bir deger yazmiyorsaniz PHP sizin icin bunu seve seve yapacak ve deger belrilemediginiz degisken icin "0" degerini atayacaktir.Deger belirlemediginiz butun parametreler fonksiyona sifir degeri alinarak gecirilecektir.
function vergi($Geliriniz,$VergiYuzdesi)
{
return $Geliriniz - (($Geliriniz/100)*$VergiYuzdesi);
}
seklinde bir fonksiyon tanimladigimizi kabul edelim.Simdi bu fonksyiona islenmesi icin degerlerimizi gecirecegiz.(Fonksiyona isleyeceegi degerleri gonderecegiz)
echo(vergi(3000));
bolye bir komutu PHP su sekilde isleyecektir.
3000 - (3000/100)*0)
Baska bir ornek verelim,
function vergi($Geliriniz=2500,$VergiYuzdesi)
{
return $Geliriniz - (($Geliriniz/100)*$VergiYuzdesi);
}
icin simdi fonksiyonumuzu 3000 degerini vererek cagiralim,
echo (vergi(3000));
yine ayni sekilde fonksyionumuz calisacak ve deger olarak 3000 degeri fonksiyon icinde 2500 degeri sanki hic yazilmammais gibi davranilacaktir.
Boyle tanimlanmis bir fonksiyon icin su ifadeyi yazamassiniz,
echo (vergi(,25));
ilk verilen $Geliriniz degeri icin sifir girmeye calsitiiniz.ama fonksiyon icinde default olarak bu parametre icin bir deger tanimli (2500)
Iste bunu kesinlikle yapamazsiniz.
Yanliz boyle bir durum icin size kodu su sekilde degistirmenizi tavsiye edebiliriz.
function vergi($VergiYuzdesi,$Geliriniz=2500)
{
return $Geliriniz - (($Geliriniz/100)*$VergiYuzdesi);
}
ve simdi fonksiyonu su sekilde cagiralim,
echo (vergi(25));