Döngüler while, do..while, for döngüsü
Döngüler Yukarıdaki iki denetim ögesi de programın ileri doğru akışını bozmayan
araçlardır. Oysa bazen programımızın bir koşul gerçekleşincele kadar
yerinde sayması ve koşul gerçekleşmedikçe ilerlememesi gerekebilir. Kimi
zaman da programımıza bir işi bitirmeden ileri gitmemesini biz
bildiririz. Program akışının bu tür denetimini döngü deyimleri sağlar.
PHP'de iki tür döngü vardır: bir durum devam ettiği veya etmediği sürece
yapılan ve kaç kere tekrar edeceği bilinemeyen
while döngüleri, ve tekrar sayısı belirli
for döngüleri.
while döngüsü Bir değişkenin içeriğinin belirli bir şartı karşılaması veya
karşılamaması halinde icra edilir. Burada dikkat edeceğimiz nokta,
programın icrası sırasında değişkenin içeriğinin veya koşulun
değişmesinin sağlanmasıdır. Aksi taktirde pıgramımız sonsuz döngüye
girer ve muhtemelen çöker.
while döngüsü şöyle yazılır:
while (koşul) {
Koşul doğru ise yapılacak işlere ilişkin komutlar
}
Bu yöntemin yaygın kullanıldığı alan, bir sayaçla yaptırılan işlerdir. Aşağıdaki programı
while.php adılma kaydedip, çalışrırsanız, PHP, Browser'ın yazı türü boyutunu 1'den 7'ye kadar büyüterek, aynı metni yazdıracaktır:
<HTML>
<HEAD>
<TITLE>PHP'de Döngü</TITLE>
****** http-equiv="content-type" content="text/html; charset=ISO-8859-9">
****** http-equiv="Content-Type" content="text/html; charset=windows-1254">
</HEAD>
<BODY>
<?php
$sayac = 1;
while ( $sayac <= 7 ) {
print ("<font size= $sayac >");
print ("<b><p>İyileri iyilikleri ile alkışlayınız!</b></p>");
print ("</font>");
$sayac ++;
}
?>
</BODY>
</HTML>
Programımız,
while döngüsü içindeki iken, sonsuz döngüden
kurtulabilmek için, yazıyı yazdırdıktan sonra, $sayac değişkenini bir
arttırıyor. Aksi taktirde, değişken hiç bir zaman while döngüsünün
beklediği şarta kavuşarak 7'ye eşit hale gelemeyecektir. (Programı,
sondaki "$sayac ++;" satırını kaldırarak denerseniz, zararsız bir sonsuz
döngünün ne olduğunu görebilirsiniz! Ama önce Browser'ın dur
düğmesinin yerinde durup durmadığna bir bakın!)
while döngüsün aradığı şartın yerine gelmesi, her zaman burada
olduğu gibi, tabir yerinde ise "elle" yapılmaz; döngünün icra ettiği
komutlar veya fonksiyonlar koşulu içeren değişkeni değiştirebilirler.
Sözgelimi elektronik ticaret sitemizde Web ziyaretçimizin
while içinde yaptığı alışverişin tutarını koşul olarak kullanabiliriz ve bu koşulu içeren değişken alışveriş ile değişebilir.
do..while while döngüsü farkettiğiniz gibi, ileri sürdüğümüz şartı, iyi
yapmadan önce sınar; ve bu şart ortadan kalkmamışsa (yani henüz
doğru/true ise) yapacağı işi yapar; başka bir deyişle while döngüsünün
yapacağı iş hiç yapılmayabilir. Fakat sınamanın iş yapıldıktan sonra
yerine getirildiği bir şekli de vardır:
do..while.. Bu döngü ise şöyle yazılır:
do {
Koşul doğru ise yapılacak işlere ilişkin komutlar
}
while (koşul);
Burada gördğünüz gibi
do..while döngüsü en az bir kere icra
edilir; çünkü şartın sınanması yapılacak işe ilişkin komutlardan sonra
gelmektedir. Bu döngünün aradığı şartın döngünün yaptığı işlerin sonucu
veya kod bölümünde bizim tarafımızdan gerçekleştirilmesi için igerekli
komutların bulunmasına dikkat etmelisiniz. Yoksa, bu döngü de
sonsuzluğa erişir! Yukarıda örneği, bu yöntemle yazalım:
<?php
$sayac = 1;
do {
print ("<font size= $sayac >");
print ("<b><p>İyileri iyilikleri ile alkışlayınız!</b></p>");
print ("</font>");
$sayac ++;
}
while ( $sayac <= 7 ) ;
?>
Bu döngüyü yazarken,
while satırının sorunda noktalı virgül bulunduğuna dikkat edin.
for döngüsü PHP'de Web programlarımız, döngünün belirli bir sayıda olmasını ve
mesela bu sayının bizim istediğimiz basamaklarda artmasını
gerektiriyorsa, döngüyü
for deyimiyle kurabiliriz. Ayrıca
for deyimi sayaç gibi şartın yerine gelmesini sağlayacak arttırma veşa
eksiltme işlemlerini kendisi yapacağı için, sonsuz döngüye girme
tehlikesi de hemen hemen yoktur. Bu döngü şöyle yazılır:
for ( $yeni_degisken atama ; koşul ; artış basaması ) {
Koşul doğru ise yapılacak işlere ilişkin komutlar
}
for deyiminin ilk ögesi, döngü sayacı olarak kullanılacak bir
değişken oluşkturulması ve buna değer atanmasına ilişkindir; sonra bir
noktalı vrigül ile bu sayacın sınırı olan koşul belirtilir. Yine noktalı
virgül ile ayırarak, sayaç değişkeninin artış hızı verilir. Bunu da
yine yukarıdaki örnekle gösterelim:
<?php
for ($sayac = 1; $sayac <= 7 ; $sayac++ ) {
print ("<font size= $sayac >");
print ("<b><p>İyileri iyilikleri ile alkışlayınız!</b></p>");
print ("</font>");
}
?>
Buradaki kod,
while ve
do..while göre çok daha kısa; ve while döngüsü sayacı arttırmayı sağlayan satır unutulsa bile çalışacağı halde,
for döngüsü unsurlara ilişkin noktalı virgüller eksik olursa çalışmayacak
ve bize böylece sonsuz döngü tehlikesini hatırlatmış olacaktır.
for döngüsü kendi sayacını verdiğiniz şartı karşılayıncaya kendisi
arttıracak, yani buradaki örneği göre $sayaç değişkeni 7 oluncaya kadar
çalışacak ve şart karşılandığı anda, sona erecektir.