MultiServis.Net //PHP El Kitabı

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

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

Giris:

Bundan 15 yil once bulabileceginiz programlama dilleri ile asagidakine benzer kodlar yazabilirdiniz..

10 PRINT "MERHABA DUNYA"
20 GOTO 10

Yukarida kod parcasi bir sonsuz dongu olusturup ekranada arka arkaya "MERHABA DUNYA" yazisinin goruntulenmesini saglar.

Bu yazimizda size aradan gecen 15 yil icerisinde programlama tekniklerinin nasil degisitigini anlatacagiz.Amacimiz sizi "yazilim muhendisi" yapmaktan ziyade organize edilmis kodlari yazmaniz icin bu yeni gelisen teknikleri daha iyi kullanmanizdir.

Moduler Yapi(Modularization)

Programi yazmaya baslamadan once hangi gorevlerin tam olarak yerine getirilmesini istediginizi kafanizda canlandirmalisiniz.Ardindan butun bir yapi icerisinden her kucuk gorev icin birer birer kucuk gruplar olusturarak bir butunu "moduler" yapilar seklinde parcalara bolmelisiniz.Zaten modern programlama tekniginde,tum bu moduller ayri ayri hazirlanarak program taamamlandiginda beraberce derlenmektedir.

Eger programinizin bir modulu kendine has ozel bir gorevi yerine getiriyorsa,bu modulu dilediginiz sayida,istediginiz zaman kullanilmak uzere programin icinden cagirabilirsiniz.Moduller programin icerisinde yer alan siyah kutular gibidirler.Hangi degerin girdigi yada sonucunda hangi ciktiyi aldiginiz onemli degildir.Programin modulu verdiginiz gorevi tam olarak yerine getiriyorsa arada gecen islemler programin genel yapisi icerisinde cokda uzerinde durulacak konular degildir.

PHP veya diger programlama dillerinde programin boyle kucuk yapilarina (modullerine) fonksiyon adi verilmektedir.

Fonksiyonlar(Functions)

Fonksyonlar,programci tarafindan yazilan ve belirli bir gorevi yerine getirmesi beklenen kucuk kod parcalaridir.(code sections)

Daha onceki konularda gordugumuz gibi fonksiyonlar verilen gorevi yerine getirmek icin "argument" adi verilen girdilerle calismaktadir.Bu girdilerin sonunda fonksiyonda bir "cikti" (output) meydana gelir.Belki bu "cikti" gene ayni fonksiyon icerisinde bir "girdi" olacaktir.

Fonksiyonlar verilen herhangi bir argument degerini "parametre" adi verilen yeni bir degiskene cevirebilirler.Daha sonra bu olusan yeni degisken gene ayni fonksiyon icerisinde kullanilabilir.

Bizler fonksiyona verdigimiz degerlerin,fonksiyon icerisindeki islemlerden gectikten sonra fonksiyonun cevabi dondurmesini saglayabiliriz.

Fonksiyonlarin Tanimlanmasi ve Cagrilmasi

Bir fonksiyon tanimlamak icin bir isim vermeniz gereklidir.Bunu yapmak icin,"function" komutunun arkasindan fonksiyona vermek istediginiz ismi yazmalisiniz.Parametre isimleri fonksiyon ismini yazdiktan sonra,parentezler icerisinde yazilmalidir.Fonksiyonun govdesini olusturan kod parcasi iste bu islemler yapildiktan sonra yazilmaya baslanmalidir.Asagida bir sekilsel ornek yer almaktadir,

function fonksiyonunadi (parametreler)
{
fonksiyon icin tanimlanan kod paracasi buraya yazilacak
}

simdi bir orenek yaparak konuyu daha iyi anlayalim.

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

fonksiyon icerisinde yapilmasini istediginiz islemler icin kac tane satir yazacaginiz konusunda herhangi bir sinirlama yoktur.Burada onemli olan nokta "return" komutunun fonksyionun sonunda yer almasidir.Zira bu komutla fonksiyona calismayi bitirdiginizi ve artik ciktiyi kullanmak istediginizi belirtiyorsunuz.Fonksyion artik "return" komutunun oldugu yerde bitmistir.

Her zaman icin bu sekilde hesaplama yapmaniz gerekmemektedir.ornek olarak HTML kodlarini progrmda kullanmak ve bunlari fonksiyon icerisinde tanimlamak itiyor olabiliriz.

function sayfa_baskisim ($Sayfa)
{
print "<HTML><HEAD><TITLE>Web siteme hos geldiniz " .$Sayfa . "</TITLE></HEAD>";
print "<BODY>";
return;
}

Gordugunuz gibi yukaridaki kod icerisinde "return" komutu fonksyionu sonlandirmak icin kullanilmistir.

Onemli bir nokta eger fonksyionun dondurdugu degeri (yani ciktiyi) goruntulemek isterseniz "echo" komutunu kullanabilirsiniz.Zira "return" ile cikti ekrana gonderilmeyecektir."return" hicbir zaman bir degeri ekranda gostermez,yanlizca fonksiyonun ciktisini (eger varsa) dondurur.

Bir fonksiyon icerisinde yer alan kod grubunu calistirmak bilinen adiyla "fonksiyonu cagirmaktir".PHP icerisinde en basit olarak bir fonksiyonu direkt olarak bir sayi gondererek cagirabilirsiniz.

echo (vergi(1600));

veya daha onceden yaratilmis bir degisken adini kullanarak,

$Geliriniz = 1600;
echo (vergi($Geliriniz));

Biraz daha ayrintili yapmak istersek,

$Geliriniz = 1600;
$VergilendirilmisGeliriniz = vergi($Geliriniz);
echo ($VergilendirilmisGeliriniz);

eger fonksiyona birden fazla parametre saglamak isiyorsaniz,butun parametreleri virgul ile ayrimak zorundasiniz,

function vergi($Geliriniz,$VergiYuzdesi)
{
$Geliriniz = $Geliriniz - (($Geliriniz/100)*$VergiYuzdesi);
return $Geliriniz;
}

Arik fonksiyonu duzgun bir sekilde cagirmak icin iki degeri de fonksiyona saglamalisiniz.

echo (vergi(1600,30));

veya iki tane degiskeni,

$Geliriniz = 1600;
$VergiYuzdesi = 30;
echo (vergi($Geliriniz,$VergiYuzdesi);

veya bunlarin karisimi olrk bir tane degisken bir tane sayisal deger,

$VergiYuzdesi = 30;
echo (vergi(1600,$VergiYuzdesi);

veya fonksiyona hic bir deger saglamadan direkt olarak,

function vergi()
{

$Geliriniz = 1600;
$VergiYuzdesi = 30;
$Geliriniz = $Geliriniz - (($Geliriniz/100)*$VergiYuzdesi);
return $Geliriniz;

}

Simdi aklinizda su soru olabilir.Biz gerekli tanimlamalari nerede hngi sira ile yapacagiz.hemen cevabini verelim,

Eger parametre kullaniyorsak fonksiyonu once veya sonra tanimlamak bir seyi degistirmez,

<?php <-----------------PHP'ye kodlari yazmaya basladigimizi soyluyoruz.

$Geliriniz = 1600; <------------------Calistirma islemi burada basliyor
$VergiYuzdesi = 30;

echo (vergi($Geliriniz,$VergiYuzdesi); <-----Fonksiyonumuzu burada cagirdik

function vergi($Geliriniz,$VergiYuzdesi) <---------Fonksiyonu buarada tanimladik
{
$Geliriniz = $Geliriniz - (($Geliriniz/100)*$VergiYuzdesi);
return;
}
?> <------------------PHP ye kodlari yazmayi bitirdigimizi soyluyoruz

fakat biraz daha duzenli kod yazmak veya isi kolaylastirmak istiyorsaniz asagidaki sekilde yazmakdaha mantikli gibi gozukuyor,aslinda aralarinda hicbir fark yok

<?php <-----------------PHP'ye kodlari yazmaya basladigimizi soyluyoruz.

function vergi($Geliriniz,$VergiYuzdesi) <---------Fonksiyonu buarada tanimladik
{
$Geliriniz = $Geliriniz - (($Geliriniz/100)*$VergiYuzdesi);
return;
}

$Geliriniz = 1600; <------------------Calistirma islemi burada basliyor
$VergiYuzdesi = 30;

echo (vergi($Geliriniz,$VergiYuzdesi); <-----Fonksiyonumuzu burada cagirdik
?> <------------------PHP ye kodlari yazmayi bitirdigimizi soyluyoruz

Eger yukaridaki programdan son satiri cikarirsaniz fonksyonumuz hic bir zaman kullanilmayacaktir.Tabii ki bir fonksiyonu siz cagirmadan PHP'nin sadece orada oldugu icin calistimrasi da dusunulemezdi.Biz en son satirda,

echo (vergi($Geliriniz,$VergiYuzdesi);

satiri ile fonksiyona ihtiyacimiz oldugunu ve bizim verdigimiz verilerle calismasini soyledik.

Tabii ki fonksiyonu her zaman bu sekilde bir defa calistirmak zorunda degilsiniz.Dilediginiz sayida istediginiz fonksiyonu cagirabilirsiniz,

$Geliriniz = 1600;
$VergiYuzdesi = 30;
echo (vergi(2500,$VergiYuzdesi);
echo (vergi($Geliriniz,30);
echo (vergi(2500,30);
echo (vergi($Geliriniz,$VergiYuzdesi);

seklindede yazabilirdik.

Simdi biraz daha ilginc bir ornek verelim ve nasil oldugunu aciklamaya calisalim,

$Serkan = 1600;
$Esra = 30;

echo (vergi($Serkan,$Esra));

function vergi($Geliriniz,$VergiYuzdesi)
{
$Geliriniz = $Geliriniz - (($Geliriniz/100)*$VergiYuzdesi);
return $Geliriniz;
}

Yukarida $Serkan ve $Esra olarak iki degisken tanimlayip fonksiyona bu degiskenleri kullanmasini soyledim.Bu degiskenlerin sakladigi degerler otomatik olarak hesaplamaya baslanirken sirasiyla $Geliriniz ve $VergiYuzdesi degerleri olarak alindi.Guzel degilmi?

Fonksiyonlarin Kullanimi ile Ilgili Kesin Kurallar

- Fonksiyon isimleri programci tarafindan belirlenir
- Fonksiyonlar parametreleri,programci tarafindan belirlenen fonksiyon isminden sonra pazrentezler icerisinde tanimlanir.
- Eger birden fazla parametreniz var is virgul ile ayirmak zorundasiniz.
- Fonkiyoun icindeki kod grubu,fonksiyon ismi ve paremetrelerden tanimlandiktan sonra {} parentezleri arasina yazilmalidir.
- Mutlaka"return" komutu fonksiyon icinde,fonksiyonun islemlerden sonra dondurecegi degeri fonksiyon disinda kullanmak amaciyla yazilmalidir.
- Eger hicbir sonuc dondurulmedi ise "return" komutu yanlizca fonksiyon sonunu belirtmek icin gorev alir.
- Fonksiyonlar ancak cagrildiklari zaman execute edilirler.Cagrilmazlar ise program icinde gorev almazlar.
- Fonksiyonlari programin akisi icinde once veya sonra cagirmaniz bir seyi degistirmez.Yani fonksiyonu once yazip sonra cagirmaniza gerek yoktur.Once cagirip sonrada fonksiyonu tanimlayabilirsiniz.
- Fonksiyonu istediginiz kadar sayida cagirabilirsiniz.

  Simdi bir uygulamali ornek yapalim

  1.Text editorunuzu acip asagidaki kodlari yazin.

  <HTML>
  <HEAD></HEAD>
  <BODY>
  Seres Otelcilik Online Web Sayfasi'na Hosgeldiniz
  <FORM METHOD=GET ACTION="tatil3.php">
  Tatil icin nereye gitmeyi dusunuyorsunuz?
  <BR>
  <BR>
  <INPUT NAME="Sehir" TYPE = "Radio" VALUE="Istanbul">
  Istanbul
  <INPUT NAME="Sehir" TYPE = "Radio" VALUE="Ankara">
  Ankara
  <INPUT NAME="Sehir" TYPE = "Radio" VALUE="Izmir">
  Izmir

  <BR>
  <BR>
  Kac yildizli otelde kalmak istiyorsunuz?

  <INPUT NAME="Yildiz" TYPE = "Radio" VALUE="Uc">
  Uc Yildizli Otel

  <INPUT NAME="Yildiz" TYPE = "Radio" VALUE="Dort">
  Dort Yildizli Otel

  <BR>
  <BR>
  <INPUT TYPE=SUBMIT>
  </FORM>
  </BODY>
  </HTML>

  2.Bu dosyayi "tatil3.html" olaraak kayit edin.

  3.Yeni bir text dosyaysi acarak asagidaki kodlari yazin.

  <HTML>
  <HEAD></HEAD>
  <BODY>
  Seres Otelcilik Online Web SONUC Sayfasi
  <BR>
  <BR>

  <?php

  function Hesaplama ($Fiyat,$SehirFaktoru,$YildizFaktoru)
  {
  return $Fiyat = $Fiyat * $SehirFaktoru * $YildizFaktoru;
  }

  $fiyat = 500;
  $YildizFaktoru = 1;
  $SehirFaktoru = 1;
  $SehirYildiz = $Sehir . $Yildiz;

  switch ($SehirYildiz) {

  case "IstanbulUc":
  $SehirFaktoru = 2;
  break;
  case "IstanbulDort":
  $SehirFaktoru = 2;
  $YildizFaktoru = 2;
  break;
  case "AnkaraUc":
  $SehirFaktoru = 3.5;
  break;
  case "AnkaraDort":
  $SehirFaktoru = 3.5;
  $YildizFaktoru = 2;
  break;
  case "IzmirUc":
  break;
  case "IzmirDort":
  $YildizFaktoru = 2;
  break;

  default:
  $SehirFaktoru = 0;
  echo "Geriye donup tekrar deneyiniz";

  }

  if ($SehirFaktoru <> 0)
  {
  echo "$Sehir sehrinde 1 hftalik tatil ". "$" . Hesaplama($Fiyat,$SehirFaktoru,$YildizFaktoru);
  }

  ?>
  </BODY>
  </HTML>

  4.Bu dosyayi "tatil3.php" olarak kayit edin.

  5."tatil3.html" dosyaysini acip bir kac deneme yapin.

  Ornek Dosyalar

  http://www.turk-php.com/ornekler/tatil3.html

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

  Her turlu gorus ve onerinizi lutfen simdi bu sayfanin yayinlanadigi forumda belirtiniz...

  Sagliicakla Kalin

  Not : Ilk defa PHPEd'i bu makaleyi yazarken kullandim.Daha once 4-5 saat arasi suren boyle bir makaleyi yazmak simdi 1-2 saat arasinda bitiyor.Degisken isimlerini kontrol et,sayfalari server'a upload et ivir zivir'dan kil tuyden kurtuldum.Tessekkurler Ergin Soysal,ellerine saglik...
  http://www.soysal.com/

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