PHP Dersleri - 2

Abdullah Şahin

Altın Üye
Altın Üye
Kayıt
3 Nisan 2008
Mesaj
2.630
Tepki
89
While

While, kelime anlamı "süresince" olduğundan belki bir anlamsal yaklaşımda bulunabiliriz. Biz while'a istediğimiz şey aktif olduğu sürece bir görevi yerine getirmesini söyleyebiliriz. Acaba gerçekten bu mu??? İnceleyelim:


while ( koşul ) {

yapılacak iş

}


While bizim ona verdiğimiz koşul gerçeklendiği sürece kendi bloğundaki işlemleri tekrar edip durur. Ama bunu nasıl yapar??

While her bir döngüsünün başında koşulun gerçeklenip gerçeklenmediğini kontrol eder, eğer gerçeklenmezse bloktan çıkar. Yani işlemi iptal eder.

Örnek vermeden buna çok benzeyen bir diğer yapıya bakalım

Do..While

Do..While'ın yaptığı iş prensipte While ile aynı, yazımı biraz farklı ve çalışma prensibi de. Hemen yazım kuralına bakalım. (Bu arada Do-While kontrol yapısı BASIC'tekinin aynısı)


do {

yapılacak iş

} while ( koşul );


Do..While, While'in aksine koşulun gerçeklenip gerçeklenmediğini döngünün sonunda kontrol eder. Yani koşul asla gerçeklenmeyecek olsa dahi yapılacak iş en az bir defa çalışır. Oysa While 'da koşul gerçeklenmezse hiç çalışmaz.

Hemen karşılaştırıp örnekleyelim:


<html>
<body>

<?php

$a=0;

while ( $a>10 ) {
$a=$a-1;
echo $a.". While döngüsü çıktısı<br>";
}

$a=0;

do {
$a=$a-1;
echo $a.". Do..While döngüsü çıktısı<br>";
} while ( $a>10 );

?>

</body>
</html>


Bakın örneğimiz de her iki koşul-döngü yapısını da kullandık. Peki çıktı ne olacak???


-1. Do..While döngüsü çıktısı


Bakın görüyorsunuz sadece Do..While döngüsü çalıştı. Koşul uygun olmasa da, kontrolü bloğun sonunda yaptığı için bir defaya mahsus bloğu işletti. Bazen işe yarayabilecek bir döngü olabilir.

Ha bu arada $a=$a-1; yerine de $a--; de yazabilirdik. Bu yazım la ilgili bir parantez açıp buna bir bakalım:


$a++ $a'nın değerini ver ve $a'yı bir arttır.
$a-- $a'nın değerini ver ve $a'yı bir azalt.
++$a $a'yı bir arttır ve $a'nın değerini ver.
--$a $a'yı bir azalt ve $a'nın değerini ver.


Şimdi birbirinin aynı gibi görünüyor ama asıl fark nerede? Hemen bakalım:


$a=10;
$b=10;
$c=$a++;
$d=++$b;


Değişkenlerimizin değerlerine bakalım:


$a 11
$b 11
$c 10
$d 11


Bakın değerin ne zaman verildiği önemliymiş... Evet konuya geri dönüyorum...

While ve Do..While ile işimiz bittiğine göre bir diğer kontrol yapısına dadanalım mı?

For

For aslında komplex bir while döngüsüdür. Mantık olarak While ile aynıdır ama farkı kontrol yapısının daha güçlü olmasında yatıyor...


for ( Tanımlama; Koşul; Her Dönüşte Tekrarlanacak İşlem ) {

yapılacak iş

}



Biraz garip bir yapı gibi görünüyor açıkçası... Garip mi dedim?? Özür dilerim. Sakin olalım lütfen...

Tanımlama dediğimiz kısım, 1 defa işletilecek olan komuttur. Ne olabilir? Mesela döngü değişkeninin tanımlanması, İlk atama veya hayal gücünüzü daha da zorlayarak elde edebileceğiniz diğer sonuçlar...

Koşul, bildiğimiz koşul yahu. IF'de WHILE'da kullandığımız hani... Koşul gerçeklendiği sürece For döngüsünün çalışmasını istiyoruz ya hani...

Her Dönüşte Tekrarlanacak İşlem ise, For döngüsünün her bir dönüşünde (ki biz buna bundan sonra iterasyon diyelim yani bir döngünün her bir dönüşü denebilir) ne yapmak istediğimizi söylüyoruz. Ne olabilir?? Mesela döngü değişkeninin azaltılması ya da arttırılması vs... EEE yeter be! Hadi örnek nereedeee!!!!

İşte:


<html>
<body>

<?php

for ( $a=1; $a<=10; $a++ ) {
echo $a.". For döngüsü çıktısı<br>";
}

?>

</body>
</html>


Örnek de böyle işte. Ya çıktısı, o da işte:


1. For döngüsü çıktısı
2. For döngüsü çıktısı
3. For döngüsü çıktısı
4. For döngüsü çıktısı
5. For döngüsü çıktısı
6. For döngüsü çıktısı
7. For döngüsü çıktısı
8. For döngüsü çıktısı
9. For döngüsü çıktısı
10. For döngüsü çıktısı


Evet çıktımız da böyleymiş. Umarım anlatabilmişimdir. Anlamıyorsanız söyleyin arkadaşlar, anlayacağınız şekilde söyleyelim :)

Switch'e geçmeden önce ForEach'i anlatmak isterdim ama ForEach'ten önce size PHP'de dizi değişkenleri (Arrays) anlatmalıyım ki onu da bir sonraki yazıya bırakacağım. O yüzden de Switch ve ForEach'i bir sonraki derse bırakıyorum, hemen dizilerden sonra. Peki şimdi ne yapacağız? Bu döngülerle ilgili önemli bir kaç aparatı anlatalım:

Break

Break ifadesini çok severim ben. Tam bana göre bir ifade. Bir döngünün aniden durmasını istiyorsak çok işe yarıyor. Döngüyü kırıyor, yani döngüden çıkıyor. Örnekleyelim mi hemen?


<html>
<body>

<?php

for ( $a=1; $a<=100000000; $a++ ) {
if ( $a==1000 ) {
break;
}

echo $a.". Dım dım dım dımıdımı dım...<br>";
}

?>

</body>
</html>


Anlamsız bir örnek ama nasıl çalıştığını anlatmak için anlama gerek yok, zaten şimdiye kadar verdiğim örneklerin hangisi anlamlıydı ki :)??

Çıktıya bakalım biz:


1. Dım dım dım dımıdımı dım...
2. Dım dım dım dımıdımı dım...
3. Dım dım dım dımıdımı dım...
...
997. Dım dım dım dımıdımı dım...
998. Dım dım dım dımıdımı dım...
999. Dım dım dım dımıdımı dım...


Peki örnek ne yapıyor, normalde 100,000,000'a kadar sayıyor ve dımdımdımım.. yazıyor her seferinde. Ama 1000.'de duruyor. Çünkü biz $a 1000 olduğu zaman break yaptırıyoruz.

Bir diğer aparat da:

Continue

Continue çalışma prensibi bakımından Break ile aynı klasmanda ama parkurları farklı. Break döngüyü bitiriyor. Continue ise sadece bir defalık iterasyonu atlıyor. Yani döngünün o dönüşü için es geçilmesini sağlıyor.

Hemen kurtarıcı bir örnek:


<html>
<body>

<?php

for ( $a=1; $a<=5; $a++ ) {
if ( $a==3 ) {
continue;
}

echo $a.". Dım dım dım dımıdımı dım...<br>";
}

?>

</body>
</html>


Bu örnek kesinlikle daha anlamlı :)) Peki ne yapıyor... Çıktısına bakalım önce:


1. Dım dım dım dımıdımı dım...
2. Dım dım dım dımıdımı dım...
4. Dım dım dım dımıdımı dım...
5. Dım dım dım dımıdımı dım...


Hayır hayır, 3'ü yazmayı unutmadım. Döngünün çıktısı öyle, continue dediğimiz zaman tekrar döngünün başına gidiyor. O iterasyondaki işlemleri es geçiyor. Yani orda $a 3 ise es geç anlamında.

Bu arada break ve continue'u sadece for'da kullanırsınız diye bir şart yok. Bütün döngüsel yapılarda geçerli: For, Foreach, While, Do-While, Switch... If hariç :) Çünkü If diğerlerinden farklı.
ALINTIDIR
 
Yukarı Alt