Sonsuz Donguler
Yazdiginiz bir "while" dongusu kendi icerisinde kisir bir
donguye donusebilir,Bu durumda php.ini dosyasinda belilenen
max_execution_time degeri boyunca dongu calistirilir
ve bu sure bitiminde ekrana hata mesaji yazilir.
Asagidaki kodu inceleyin ama kesinlikle calistirmayin...
$Sayac=1;
$TestDegiskeni=True;
While ($TestDegiskeni)
{
$Sayac++;
}
Yukarida iki tane degisken tanimlanmistir.Bunlardan birincisi
$Sayac digeri de $TestDegiskeni 'dir.Gordugunuz gibi dongu
icerisidne $TestDegiskeni degiskenin degerini degistirecek
herhangi bir yapi yok.Dolayisi ile dongu ssonsuz bir calisma
sureci icerisidne girmisitir...
ONEMLI : Windows makinelerde bu dongu kaynaklarin tamamini
emecektir.Sonunda butun makine ve sistem kilitlenebilir.
Her zaman icin "sonsuz dongu" leri boyle orataya cikarmak
ve farkina varmak mumkun olmayabilir.Bazen bu durum ozel sartlar
altinda kendiliginde de olusabilir.Asagidaki kodu inceleyin,
$Sayac=100;
Do
{
$Sayac = $Sayac * $Degisken;
$Sayac--;
} While ($Sayac>0)
Yukarida acik sekilde goruldugu uzere bu dongunun sonzuza
gidip gitmeyecegini $Degisken isimli degiskenimiz belirliyor...
Beklenmeyen Cikti Hatalari
Programin basarisizliga ugramasinda on buyuk etmen programcinin
yaptigi mantik hatalaridir.Bunun en guncel ornegi NASA'nin
yonettigi bir Mars operasyonunda kullandiklari aracin aniden
yok edilmesi olmustur.
Olay incelendiginde araci yoneten programin bir kisminin "inch"
sistemine bir kisminin ise "metrik" sisteme gore yazildigi
ortaya cikmistir.(Bu sekilde tanimlamalar kullandigim icin
ozur dilerim.Bir muhendis olarak olcme sistemlerini biliyorum
ama halkin tamaminin olayi anlamasi ici bu sekilde yazdim...Sonucta
"SI" yazsam kimse anlayamazdi)
Bu konu hakkindaki daha detayli bilgiyi,
http://mars.jpl.nasa.gov/msp98/news/mco990930.html
adresinden ogrenebilirsiniz...
Burada aciklamak istedigimiz bir konu bulunmaktadir.Program
icinde bu tip hatalarin hepsini deneme asamasinda yakalamak
imkansizdir.Ancak durum ortaya ciktigi zaman bilgi sahibi
olup duzeltme sansina sahip olabilirsiniz...
Fonksiyon,hic bir deger dondurmuyor...
Eger bir fonksiyonu yazdiysaniz ve "return" ile fonksiyonun
sonucunda cikan degeri dondurmediyseniz iste bu hataya sebep
olursunuz.Asagida yazdigimiz kod parcasi tamamen kurallara
uygundur : (inceleyin ve yazinin devaminda ne demek istedigimizi
anlamaya calisin)
echo (vergi(1600,25));
function vergi ($Geliriniz,$VergiOrani)
{
$Geliriniz = $Geliriniz - (($Geliriniz/100)*$VergiOrani);
}
yukarida goruldugu uzere "return" komutunu kullanmadik.Kodumuz
dogru ama sonucta fonksiyonun boylece dondurulmemis
oldu.
Echo ile bu fonksiyonu cagirirsaniz ekranda kocaman bir "0"
ciktisi gorursunuz.Sonuc olarak PHP'yi suclamak yerine programcilik
yeteneklerinizi ve bilginizi sinamak daha dogru olacaktir.
Size PHP ile fonksyonlarin kullanimi konusunda detayli bilgi
daha onceden verilmisti...
Argumentler yanlis sira ile fonksiyona gonderiliyor,geciriliyor...
echo (vergi(1600,25));
function vergi ($Geliriniz,$VergiOrani)
{
return $Geliriniz - (($Geliriniz/100)*$VergiOrani);
}
Hersey dogru ama birde fonksiyonu soyle cagirdiginizi dusunelim.
echo (vergi (25,1600));
beklediginiz sonuc sizce dogru olacakmi?
Tabiiki sonuc beklediginizden biraz farkli olacaktir.$Geliriniz
olarak 25 sayisi $VergiOrani olarakta 1600 rakami fonksiyona
gecirilecektir.
Kafa karistiran "atama" ve "esitlik" operatorlerinin kullanilmasi...
Ozellille "if" yapilari kullanirken yapacaginiz islemlerde
eger bir esitligin varolup olmadigini sinamak istiyorsaniz
mutlaka "==" operatoru kullanmalisiniz.
Asagidaki gibi yazilan ve bir esitligin olup olmamasini sinayan
programimiz tamamen yanlistir
if ($kisa_kulenin_yuksekligi = 0) {
echo ("Bu yazim sekli yanlistir");
}
yukarida yapilan islemde "$kisa_kulenin_yuksekligi = 0" ile
degiskene bir deger atanmistir.Onun "0" sayisina esit olup
olmadigina bakilmamistir.
Daha Iyi Kod Yazma Teknikleri
Su ana kadar "hatalari" nasil ele alacaginizi ogrendiniz.Artik
daha guzel ve verimli kodlama tekniklerini ele alabiliriz.
Burada anlatilan konular,yararlari anlatilamayacak kadar cok
oldugu halde, halen bir cok programci tarafindan uygulanmamaktadir.Sizde
onlardan bir tanesi olmayin ve kendinizi gelistirin.Burada
gosterilen teknikler sizin cok daha iyi programlar yazmanizi
ve verimizi arttricaklardir.
Kodlarinizi Girintili Yazin...
Daha once soylemistik simdi tekrar soyleyelim:Kodlarinizi
mumkun oldugunca girintili olacak sekilde yazin.Bu hayati
sizin icin daha kolay bir halke getirecektir.ornek bir kodlama
teknigi asagida verilmistir.(Kullandigimiz tekniklerle ve
HTML ile size bunu gostermek biraz zor oldugu icin bir program
yazip onu .phps uzantili olarak servera yerlestirdik.Asagidaki
linke tiklayarak burada yazilan kodun girintili seklini yani
daha anlasilir halini gorebilirsiniz.sonucta PHP sizin onu
nasil yazdigina degil, kodlarin islevselligine bakacaktir.Biz
burada size tavsiye olarak eger bunu yaparsaniz geri donup
kodlara tekrar bakinca daha okunabilir bir kod grubu bulmanizi
istiyoruz)
if ($Text == "Dogru")
{
$sayi = 7;
if ($Text2 == "Dogru")
{
$sayi2= 8;
}
else
{
$sayi2 =0;
}
}
simdi bu kodlarin birde girintili sekilde yazilmis haline
bakin anlasilmasi daha kolay oyle degilmi...
http://www.turk-php.com/ornekler/girintili.phps
Kodlariniza Yorum Ekleyin...
Bunu yapmak cok kolay oldugu halde cogu programci usengeclik
yapip veya baska nedenlerden dolayi "yorum ekleme" uygulamasini
yapmiyor.
Oysaki 15 gun sonra kendisi bile yazdigi bir kod parcasinin
ne gorev yaptigini veya hangi degiskenlerin ne icin tanimlandigini
hatirlayamayacak kadar beyni onu aldatabilir.
Eger kurumsal bir isletmede calisiyorsaniz bu konu cok onemlidir.Siz
isletmeden ayrildiginizda yerinize gelecek olan kisi ne yapmak
istediginiz anlayabilmelidir.Temiz bir dil ile yaptiginiz
her islemi "programin icinde yorumlar kullanarak belirtmelisiniz"
Php icerisinde bir satir yorum eklemek icin iki tane slah
isareti "//" kullanilir.
$Sure = 120; // Nukleer reaktor cekirdegi erimeden onceki
uyari suresi
Yukaridaki kodlara bir de reklendirilmis ve duzenli hale getirilmis
sekilde bakmak isterseniz,
http://www.turk-php.com/ornekler/girintili1.phps
veya baska bir ornek,
if ($Soru == "Fax") //Eger kullanici Fax secenegini isaretlerse.
{
.........Kodlar...Kodlar.................................
}
elseif ($Soru == "Email") //Eger kullanici Email secenegini
isaretlerse.
{
.........Kodlar...Kodlar.................................
}
else // Kullanici bir sey isaretlemedi.Hic bir onay gonderme.
{
.........Kodlar...Kodlar.................................
}
Yukaridaki kodlara bir de reklendirilmis ve duzenli hale getirilmis
sekilde bakmak isterseniz,
http://www.turk-php.com/ornekler/girintili2.phps
Detayli Yorum Eklemek
Eger daha detayli yorumlar eklemek istiyorsaniz, /* ve */
isaretlemesini kullanmalisiniz.Ornek vermek istersek,
/* +---------------------------------------------------------------------+
| Kontrol Fonksiyonlari Bolumu |
+---------------------------------------------------------------------+
*/
function ilkfonksiyon($Parametre) {
/*
Bu fonksiyon kullanicidan gelecek bilgilerin dogrulugunu kontrol
edecektir.
Yanlizca bir tek paramatere alacak ve buda emal'in dogru yazilip
yazilmadiginin
kullanilacaktir.
*/
}
Olabildigince Cok Fonksiyon Kullanarak Program Yazin...
Simdiye kadar aciklanan bilgiler sizin fonksiyonlari nnasil
kullanabilceginizi gostermekteydi.Sizin bu bilgilere sahip
oldugunuzu kabul ediyoruz.Eger simdi ogrenmek istiyorsaniz
bilgi arsivimizden "Zekice Kod Yazmak" konu baslikli serimize
goz atabilirsiniz.
Programlar'inizi yazarken, yapmak istediginiz "bir islemin"
programin cesitli kesimlerince devamli olarak kullanilcagini
goreceksiniz.Bu sekilde tekrarlanan islemler icin bir fonksiyon
tanimlayip,her ihtiyaciniz oldugunda bu fonksiyonu cagirmak
cok guzel bir progranmlama teknigidir.
<?php
//Form detaylarini isle.
FormVerileriniIsle ($Isim,$Email);
//Verileri isleyecek fonksiyion tanimlaniyor...
function FormVerileriniIsle ($Isim,$Email)
{
//Yapilacak kontrol islemeleri
}
?>
Mutlaka Dosyalarinizi "Include" Ederek Kullanin
Kullanilacak bir takim genel fonksyionlari scriptin yazildigi
dosyadan ayri olarak, bir baska dosya icine yazip onu her
gerektiginde "include" komutu ile programimiza eklemek cok
kullanilan yaygin bir yontemdir.
Mesela tum sitenin kullanacagi "header" ve "footer" tabir
edilen ve web sayfasinin "bas kisimi" ve "son kisimi" icin
birer fonksiyon tanimlayip yeni yaratacagimiz her sayfada
bunlari,
<?php
include ("./genel.inc.php");
?>
olarak cagirmak, bizi her sayfa icin bunlari birer birer tekrardan
yaratamak ve kullanmak zorlugundan kurtaracaktir.Bir defa
tanimla ondan sonra onu "include" et mantigi cok kullanisli
ve kolaydir.ustelik sitedeki bir bilgiyi,mesela email adresini
degistirmek istediginizde gidip o dosya icindeki veriyi degistirmek
yeterli olacaktir.Boylece tum site bir saniye icinde update
edilmis hale gelecektir.
Mutlaka Anlamli Degisken Isimleri Kullanin...
Asagidaki kod'a bir goz gezdirin,
<?php
$a=0;
b=12;
if ($a == $b) {
$d=1;
} else {
if ($a>$b){
$tn = "Kule A";
$sn = "Kule B";
$th = $a;
$sh = $b;
}else {
$tn = "Kule A";
$sn = "Kule B";
$th = $a;
$sh = $b;
}
$d=0;
}
if ($d == 1) {
echo("Iki kulenin de yuksekligi esit");
}else {
$r = $th/$sh;
echo("Bu durumda $tn kulesi $r kat daha uzundur $sn kulesinden.");
}
?>
Ilk yazdiginizda bu sekilde anlamsiz degisken isimleri kullandiniz.1
hafta sonra kodlariniza bakinca bunu ben mi yazmistim diyeceksiniz.Hayati
kendinizi icin daha zor hale getirmeyin...Programci olmanin
keyfine bakin :)
Kendinize iyi bakin....
Serkan Hadi Ceylani
|