MultiServis.Net //PHP El Kitabı

<<= Önceki Sayfa | PHP Ana Sayfa | Sonraki Sayfa =>>

Zekice Kod Yazmak - BOLUM 4 Yazar: Serkan Tarih: 01/03/02

Fonksiyonlar'in Ic Ice Yerlestirilmesi (Foksiyonlarin Yuvalanmasi)

Fonksiyonlar'da ayni dongulerde oldugu gibi birbiri icerisine yerlestirilebilir."If" yapilarini veya donguleri bu sekilde ic ice yerlestirmek gercekten kullanisli olsa da is fonksiyonlara gelince durum biraz degisir.

Genel olarak fonksyionlar bu sekilde ic ice yerlestirilerek kullanilmaz.Cok gerekli olmadikca bu yola gitmekten kacinin.Bizler size bu bolumde yanlizca bilgi edinmeniz acisindan aciklamalar yapmakla yetinecegiz.

Bir ornek uzerinde konuyu yakindan inceleyelim,(Tekrar ediyorum yanlizca akademik bilgi olmasi acisindan anlatilmaktadir.Fonksiyonlar tek baslarina tanimlandiklari zaman daha verimli olurlar)

function emeklimaasi ($Toplam)
{

function vergi($Geliriniz)
{
return $Geliriniz - (($Geliriniz/100)*20);
}

$VergiyiHesapla = vergi($Toplam);
return vergi ($Toplam) - (($VergiyiHesapla/100)*3);
}

$Toplam = 2500; //Bende emekli maasinin 2500 dolar olmasini isterdim ama maalessef :)
echo (emeklimaasi($Toplam));

Gordugunuz gibi en son satirda "emeklimaasi" fonksiyonumuzu cagirdik.Bu fonksiyon icinde bir baska fonksiyon olan "vergi" fonksiyonu var.

$Toplam = 2500; demekle degiskene 2500 degerini atadim.

Bu degeri "emeklimaasi" fonksiyonuna islemlerde kullanilmasi icin gonderdim.

Ikinci fonksiyonumuz calismaya basladi ve ,

$VergiyiHesapla = vergi($Toplam);

satiri ile "vergi" fonksiyonun kullanacagi degeri fonksiyona post ettim.(Sonucta tanimli bir $Geliriniz degeri olmadigi halde ben "vergi ($Toplam)" demekle artik fonksiyon icinde kullanilacak $Geliriniz degiskenin degerini belirlemis oldum.$Toplam degiskenin degeri ne ise $Geliriniz yazan yerlere artik o deger yerlestirilecek.

Onemli bir konu,

Birde programin sonundaki "echo" komutunu iki defa yazalim ve size ne oldugunu gosterelim,

function emeklimaasi ($Toplam)
{

function vergi($Geliriniz)
{
return $Geliriniz - (($Geliriniz/100)*20);
}

$VergiyiHesapla = vergi($Toplam);
return vergi ($Toplam) - (($VergiyiHesapla/100)*3);
}

$Toplam = 2500; //Bende emekli maasinin 2500 dolar olmasini isterdim ama maalessef.
echo (emeklimaasi($Toplam));
echo (emeklimaasi($Toplam)); //<-------Yanlizca bu satiri kod parcasina ekledim.

Boyle bir sey yaparasaniz,alacaginiz hata mesajini asagidaki linke tiklayarak gorebilirsiniz.

http://www.turk-php.com/ornekler/vergi1.php

Bu yazinin ilerleyen kisimlarinda neden bunu yapmamiza izin verilmedigini anlatacagiz.Simdilik size boyle bir sey yapmak istediginizde yapmaniz gereken islemin ne oldugunu gosterelim.

function emeklimaasi ($Toplam)
{

function vergi($Geliriniz)
{
return $Geliriniz - (($Geliriniz/100)*20);
}

$VergiyiHesapla = vergi($Toplam);
return vergi ($Toplam) - (($VergiyiHesapla/100)*3);
}

$Toplam = 2500; //Bende emekli maasinin 2500 dolar olmasini isterdim ama maalessef.
echo (emeklimaasi($Toplam));
echo (vergi($Toplam)); //<------Bu satiri ekledim.

boyle bir programin ciktisini asagiaki linki izleyerek gorebilirsiniz.

http://www.turk-php.com/ornekler/vergi2.php

emeklimaasi () fonksiyonunu yanlizca bir kere cagirabiliriz.Eger bunu gozardi ederseniz fonksyion icin coklu declarations tanimlarsinizki buda hataya sebep olur.

Evet konunun basinda belirtildigi gibi bu tip yontemlerle fonksiyonlari ic ice kullanmak kullanisli degildir.

Onun yerine boyle bir ornek icin asagidaki kodlari yazmak daha uygundur.

function vergi (&$Geliriniz)
{
return $Geliriniz = $Geliriniz - (($Geliriniz/100)*20);
}

function emeklimaasi ($Geliriniz)
{
return $Geliriniz = $Geliriniz - (($Geliriniz/100)*3);
}

$Geliriniz=2500;
echo (vergi($Geliriniz));
echo (emeklimaasi($Geliriniz));

Iste boylece iki tane fonksiyon tanimlamis olduk.daha mantikli ve goze hoc gorunuyor degilmi.Haa unutmadan dikkat ettiyseniz,

function vergi (&$Geliriniz)

satirinda bir tane "&" isareti kullandim.Nedenini onceki konularda anlatmistim eger okumadiysaniz simdi geriye donup bakmanin tam zamani :)

Saygilar,
Serkan Hadi Ceylani
serkan@turk-php.com

<<= Önceki Sayfa | PHP Ana Sayfa | Sonraki Sayfa =>>