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

Geri sayim...
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.
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!




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