Merhaba,
PHP, bildiginiz gibi herkese acik ve kullanicilari tarafindan
gelistirilmekte olan
bir dildir. Etrafta pek fazla Turkce PHP uygulamasi orneginin,
anlatimi bulunmadigi
icin vakit buldukca sizlerle degisik isler yapan, kendi yazdigim
PHP programciklarini
paylasmak istedim. Bu tur yazilarin devaminin, sizlerden gelen
istek ve fikirler
dogrultusunda; yani sizin de katkilarinizla devam edecegini
dusunuyorum.
Bu yazi PHP'ye yeni baslamis, baslamayi dusunen ya da ileri
seviyedeki PHP
kullanicilarina ufak hatirlatmalarda bulunmak icin yazilmi$tir.
Lafi fazla uzatmadan ilk ornegimizi incelemeye baslayalim.
Bu ornekte "DATE, SWITCH ve IF" komutlarina goz atacagiz.
Oldukca basit bir ornek,
ancak 'basit' kavraminin da goreceli oldugunu unutmayalim
:)
Benim de katkika bulundugum Ingilizce tabanli bir sitenin
kurucularindan
bir arkadas (Deej), isledigi bir suctan dolayi hapise girmisti.
Sitenin forumunda
surekli olarak "Deej ne zaman donecek" tarzi sorulardan sikilan
mudavimler, sitenin
ana sayfasina, tek isi Deej'in donusune kac gun kaldigini
gostermek olan bir script
yazilmasi konusunda fikir birligine vardilar. Benim de bos
vaktim oldugu icin bu scripti
hazirladim.
Isterseniz, her programlama dilinde, kodlamaya baslamadan
once yapmamiz gereken Algoritma
Cikarma mevzusuna bir el atalim. Kimilerinin farkli goru$leri
olsa da Algoritma benim icin
"yapacagimiz isin bir taslagini cikarmak"tan ibarettir. Kodlamaya
baslamadan once, kagit
ustunde yapilan bu on cali$ma; size hem zamandan kazandirir,
hem kodlamanin ileriki
safhalarinda kar$iniza cikabilecek sorunlari gormenizi saglar;
hem de doldurmaniz gereken
bilgi bosluklarini onceden gormenizi saglar.
Bunu gunluk hayatiniza da uygulayabilirseniz; sizin icin oldukca
yararli oldugunu
goreceginizden eminim.
Simdi adim adim programimizin yapmasi gerekenleri dusunelim;
1. Belli bir gune ne kadar kaldigini ogrenmek icin, o gun
ile bulunulan gun arasindaki
fark alinmali.
Bunun icin once bugunun tarihi alinacak, sonra da aradaki
gun sayisi
hesaplanacak. Eh, konu tarih olduguna gore PHP'de bu isi en
iyi DATE fonksiyonu halleder.
(fonksiyon dedigime bakmayin, bazilarina gore bu bir komuttur.
Aslinda isin dogrusunu
ben de tam olarak bilmiyorum.)
2. Aradaki gun sayisi hesaplandiginda karsimiza baslica 4
farkli sonuc cikacaktir :
i. Bircok gun daha gecmesi gerekli..
ii. Sadece 1 gun kaldi.
iii. 0 gun kaldi, yani gun bugundur!
iv. -x gun kaldi, hedeflenen gun geldi gecti bile, mirim uyuma!
Bunlarin kontrolu gereklidir, bunun icin SWITCH ve IF fonksiyonlari
isimize yarayabilir.
Evet, algoritmamizin sadelestirilmis hali bu. PhP kodunun
basladigini belirten "<?" veya
"<?php" i$aretimizi koyup, kodlama ile yolumuza devam
edelim.
<?
# deejcnt.php by ASA The ZeroTimeR < asa@antionline.org
>
# Dedicated to deej, who caused many nice people come together
# @ info-x
**********
# veya // i$aretleri bulunduklari yerden itibaren (eger
¤escapelenmemislerse)
yazilanlarin islenmemesini saglarlar. Scriptin isleyisi,
kim tarafindan yazildigi ya da
ne ise yaradigi gibi konularda bilgi verirler. Eger bu
isi bircok satir icin yapmak
istiyorsak, baslangic satirina /* i$aretini, mesajin bittigi
satirin sonuna da */
isaretini koymak lazim gelir.
Escapelemek:
Ozel anlami olan bir isareti, o anlamdan arindirmak.
Orn:
$asa="Merhaba";
echo ("$asa merhaba");
bize
"Merhaba merhaba"
çiktisini verecektir.
$asa="Merhaba";
echo ("\$asa merhaba");
ise,
"$asa merhaba"
olarak bize yansiyacaktir.
Demek ki escapelemek istedigimiz karakterin onune "\"
i$aretini koyuyormusuz.
Eh, isaretini goruntuleme isini, onune bir daha koyarak
halledebiliriz. ("\\")
$today= date ("j / M / Y");
echo ("Today is $today <br>");
$today degiskenine, date fonksiyonunu kullanarak
birseyler atadik...
Nedir bunlar:
-j: Basta 0 (sifir)olmadan ayin gunu. (1,2,9...15,18,30
gibi)
-M: Scriptin calistigi sistemde yuklu bulunan tarih
ayarlarina gore, o ayin ilk 3 harfi
(Ingilizce: Jan, Feb...Jun, Oct) (Turkce: Oca, Sub...Haz,
Eki)
-Y: 4 rakamla yil (1979,1999,2001)
Bunlarin arasina koydugumuz / isareti ise sadece gozu
rahatsiz etmeden onlari ayirmak
icindir.
Yani, su anda $today degiskeni 16 / Dec / 2001 degerini
tasiyor.
Ikinci satir ile bu durumu ekrana yansitmis olduk.
Sondaki <br> ise, bildigimiz
HTML'deki satir ayiraci.
Onemli: Date konusunda daha fazla bilgi icin PHP Manual'a
goz atmaniz yeterli.
$day= date ("j"); # $day degi$kenine gun atandi (16)
$mnt= date ("n"); # $mnt degi$kenine ba$inda 0 olmadan
bulunulan ay atandi (12)
$yr= date ("y"); # #yr degi$kenine yilin son 2 rakami
atandi (01)
Ailem yemege bekliyor beni... Ben gidip onlara e$lik
ederken siz de kendinize
bir kahve daha koyun, (iciyorsaniz) bir sigara daha
yakin, ve biraz daha karmasiklasacak
olan yazinin geri kalani icin kendinizi hazir edin...
Yettim!
switch ($mnt) {
Switch komutu ile parantez icindeki degiskenin, az sonra
siralayacagimiz kosullardan
hangisine uydugunu kontrol eder ve uygun oldugu yerde
bulunan emirleri uygular.
Dikkat edin, bu sefer satirdan sonra ";" degil "{"
isareti var. Bu da uzunca bir yola girdigimizi gosterir
bize :) Isimiz bittiginde ise "}" isareti ile kapiyi
kapatmatyi unutmayalim, yoksa "Parse Error" kurbani
oluruz :)
case 1: # Eger $mnt 1'e esitse (1'den sonra ; i$aretini
de kullanabilirsiniz)
$left= (31 - $day) + 314; # $left degi$keni buna e$ittir.
break; # yoluna devam et.
case 2: # Eger $mnt 2'ye esitse
$left= (28 - $day) + 286; # $left degiskeni buna
e$ittir.
break; # yoluna devam et
...
Oradaki 314 rakaminin sirri sudur:
Deej'in geri gelis tarihi 11 Kasim 2002
olarak belirlendi. O tarihe kadar Ocak ayindan itibaren
toplam 355 gun var. Eh biz
bunun 31'ini (ocak ayini) parantez icinde kullandigimiza
gore geriye 314 kaliyor.
2. durumda ise Subat ayindayiz 314 - 28 = 286...
Case 1'in Ocak, case 3'un Mart ya da case 11'in Kasim
ayini ifade ettigini
anladiginizi umuyorum. Cunku biz $mnt'nin kontrolunu
yapiyorduk ve
$mnt de yilin kacinci ayinda oldugumuzun degerini
tutuyordu.
Bu durum'lar 12'ye kadar ayni dogrultuda ilerliyor.
12. ayda ise
iki farkli durum var.Ya 2001'in 12. ayi ya da 2002'nin...
Oyleyse simdi bir case
icinde if komutu gorelim:
case 12:
if ($yr == "01") { # Eger $yr (yil) degiskeni 01'e
esitse (ki bugun icin esit)
$left= (31- $day) + 345; # $left'in alacagi deger
budur.
} # if'in kapisini kapat, iceri soguk girmesin.
else { # Eger yukaridaki kosul haricinde bir durum
soz konusuysa (ki bu ornekte sadece 02 olabilir)
$left= (11- $day); # $left'in degeri budur
} # else'in kapisini kapat.
break; # yoluna devam et yâ seydi.
Ve son olarak ta belirtmis oldugumuz durumlardan
hicbiri $mnt'ye uymuyorsa bir
secenek belirtmeliyiz. Her ne kadar bu ornekte,
normal sartlar altinda 12 kosul harici
bir durum soz konusu olmayacak olsa da sizi "default"
ile tanistirmak istiyorum :
default: # eger caselerden hicbiri uymadiysa...
echo ("Something is wrong with the server...");
# durum bundan ibarettir
} # bu hangi kapiyi kapatti? Tabii ki Switch ile
actigimiz ana kapiyi...
Dikkat edin, default'la birlikte break kullanmaya
gerek gormedik.
Switch deyimi hakkinda daha fazla bilgi icin PHP
Manual'a basvurabilirsiniz.
Su ana kadar, bugunun tarihini ogrendik ve bu
tarihe gore hedefimize kac gun
kaldigini hesapladik. Simdi sira, elimizdeki verileri
isleyip, ekrana bir cikti
gondermeye geldi.
if ($left == "0" ) { # $left 0'a e$itse...
echo ("Yeaahhaa, today Deej is back !!!"); # Hedefimize
ula$tik... Gun bugundur !!!
}
elseif ($left =="1") { # $left 1'e e$itse...
echo ("Only $left day left for Deej's arrival!");
# Hedefimize ula$maya sadece 1 gun kaldi !!!
}
elseif ($left < "0") { # $left 0'dan kucukse,
yani negatif ise...
echo ("Deej, c'mon shut this counter down.");
# Bu counterin omru doldu artik kaldirsaniz iyi
olur...
}
2. dongude, DIE (GEBER!) emrini vererek, scriptin
sessizce susmasini da
saglayabilirdik. die (""); $eklinde bir dizilim
ile yeni outputla kar$ila$mazdik.
Bu ornekteki echo komutu yerine die'i da kullanabilirdik.
Cunku bu ko$ul dogru ise,
scriptin geri kalaninda i$imize yarayan bir durum
kalmadi. (bu sadece bu ornek icin gecerli).
Eger "die" kullandigimiz elseif dongusunden sonra
bir echo ("bye"); olsaydi, ekrana
bye yazisi cikmazdi.
else { # yukaridaki "eger" seceneklerinden hicbiri
sana uymadiysa...
#+ (bunu default gibi dusunebilirsiniz)
echo ("Only $left days left for Deej's arrival!");
# Sadece $left gun kaldi...
}
Gordugunuz gibi bir if ve else arasinda ba$ka
ko$ullamalar da bulunabiliyor,
ve biz bunlari elseif ile i$aretliyoruz. Test
edecegimiz rakam 5 olsaydi, if'i atlardik,
1. elseif'i de atlardik, 2. de atlanirdi ve sonuc
else yani "ko$ul yukaridakilere uymadi
ama buna uyar" kismina gecmi$ olurduk.
?> Son olarak bu i$areti de verip, kapilarin
kapisini; PhP kodunun sona erdigini belirten
kapiyi da kapatip scriptimizi bitiriyoruz.
Bugun 16 Aralik 2001 olduguna gore; bakalim ben
bu scripti $u an cali$tirdigimda ne sonuca
varacagim?
"""""""""""""""""""""""""""""""""""""""
Today is 16 / Dec / 2001
Only 360 days left for Deej's arrival!
"""""""""""""""""""""""""""""""""""""""
Evet... Sadece switch, if, date derken ba$ka konulara
da el attik sanirim...
Umarim birilerine yarari dokunur.
Her ne kadar kabul etmesem de, beni de "insan"
statusune aldiklari icin ben de hata
yapabilme luksune sahibim, o yuzden "cntasa" icinde
herhangi bir hata veya eksiklik
gorurseniz asa@antionline.org
a mailinizi esirgememenizi dilerim.
Hatta soru, tesekkur, istek ve hakaretlerinizi
de asa@antionline.org
adresine
yoneltebilirsiniz.
Daha kisa surede cevap alabilmek icin, lutfen
Subject kismina, bu yazinin kimlik
numarasi olan #16-ASA-1201-I 'i yazmayi unutmayin.
Son olarak, yazinin alt kisminda bu yaziyi kendi
sitesinde yayinlamak isteyenler icin
uymalari gereken "ASA Public License"in kisa bir
bolumu var, ilgililerin okumasi rica
olunur. Bu vesile ile hepinizin mubarek Ramazan
Bayrami'ni kutlarim.
Signed,
ASA The ZeroTimeR
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Bu script(cik) ASA Public License altinda yayinlanmakta
olup, icindeki verilere,
yazilara ve ozellikle de bu aciklama bolumune
dokunulmadikca, dizayn acisindan
istendigi gibi degistirilerek istenilen sitede
kullanilabilir.
Ancak once bu durumdan asa@antionline.org
adresine mail atarak beni haberdar etmeniz
uygun olacaktir.
Bu yazi emek verilerek, hicbir kar$ilik istenmeden
Turk Internet Kullanicilarina
armagan edilmi$tir. Calma, cirpma, kaynak gostermeden
hatta sadece benim adimi
degi$tirerek yayinlamaya kalkan eminim ilahi adalet
ile cezalandirilacaktir.
Denemesi bedava, odemesi IMF faizlerine endeksli
olacaktir.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|