Türkiye'nin ilk Cross-Platform OldSchool MOBİL & PC 1-99 Sunucusu Lamira2 6 Kasım'da Açılıyor! Büyük Açılışı Kaçırma HEMEN TIKLA!
while (condition) { ... } yapısı, belirlenen koşul true olduğu müddetçe içindeki kod bloğunu tekrar eder. Koşul denetimi her turun başında yapıldığı için, eğer başlangıçta koşul false ise döngü gövdesi hiç çalıştırılmaz. Sonsuz bir döngüye girmemek için, blok içerisinde koşulu değiştirecek bir işlem yer almalıdır.
PHP:
<?php
$balance = 1000;
$year = 0;
while ($balance < 2000) {
$balance *= 1.07; // 7% interest per year
$year++;
}
echo "Doubled after $year years: ", round($balance, 2);
while döngüsü, döngünün kaç kez çalışacağının önceden bilinmediği, ancak ne zaman durması gerektiğinin net olduğu durumlar için idealdir. Örneğin, faiz oranlarını değiştirerek sonucu gözlemlediğiniz bir senaryoda bu yapı kullanılır.do while: En Az Bir Kez Çalıştırma
do { ... } while (condition); yapısında koşul kontrolü işlemden sonra gerçekleştirilir. Bu sayede döngü bloğu, koşul ne olursa olsun en az bir defa çalışır. Sondaki noktalı virgülün kullanımına dikkat edilmelidir.
PHP:
<?php
$i = 10;
while ($i < 5) {
echo "while: $i\n"; // never runs
$i++;
}
$i = 10;
do {
echo "do while: $i\n"; // runs once
$i++;
} while ($i < 5);
Bu yapı genellikle "önce dene, sonra kontrol et" mantığının gerektiği yerlerde kullanılır; örneğin, altı gelene kadar zar atmak veya benzersiz bir kod üretilene kadar denemeler yapmak gibi. Kontrol aşamasından önce ilk işlemin yapılması zorunludur. Kodu çalıştırdığınızda her seferinde farklı sonuçlar elde edebilirsiniz:
PHP:
<?php
$rolls = 0;
do {
$roll = random_int(1, 6);
$rolls++;
echo "Roll $rolls: $roll\n";
} while ($roll !== 6);
echo "Got a six after $rolls rolls\n";
while (true) ile break Kullanımı
Çıkış koşulunu döngünün başında değil de gövdenin ortasında kontrol etmek daha pratikse,
while (true) şeklinde sonsuz bir döngü kurup break komutuyla çıkış yapabilirsiniz. Diğer döngülerde olduğu gibi continue ifadesi ise mevcut adımı atlayarak doğrudan bir sonraki koşul kontrolüne geçer.
PHP:
<?php
$queue = ['email:ada', 'skip', 'email:linus', 'stop', 'email:grace'];
while (true) {
$job = array_shift($queue); // take the first item
if ($job === null) {
echo "Queue empty\n";
break;
}
if ($job === 'skip') {
continue;
}
if ($job === 'stop') {
echo "Stop signal, ", count($queue), " job(s) left\n";
break;
}
echo "Processing $job\n";
}
array_shift() fonksiyonu, dizi tamamen boşaldığında null döndürür; bu da döngüyü bitirmek için kullanılan bir diğer yoldur. Boş diziler PHP'de false olarak değerlendirildiği için, aynı döngü while ($queue) şeklinde de kurgulanabilir.Dosyaları Satır Satır Okuma
fgets() fonksiyonu her seferinde bir satır okur ve dosya sonuna ulaştığında false değerini döndürür. Bu özelliği sayesinde doğrudan bir while döngüsü tarafından yönetilebilir. Aşağıdaki örnekte önce dosya oluşturulur, ardından içeriği okunur.
PHP:
<?php
file_put_contents('visits.log', "2026-03-01 home\n2026-03-01 pricing\n2026-03-02 home\n");
$handle = fopen('visits.log', 'r');
$count = 0;
while (($line = fgets($handle)) !== false) {
$count++;
[$date, $page] = explode(' ', trim($line));
echo "$count: $page on $date\n";
}
fclose($handle);
$line = fgets($handle) ifadesindeki parantezler kritik öneme sahiptir; çünkü önce atama işlemi yapılmalı, ardından sonuç false ile karşılaştırılmalıdır. Sadece truthy bir kontrol yapmak yerine !== false kullanmak, içeriği sadece "0" olan bir satırın (ve ardından yeni satır gelmeyen durumların) döngüyü vaktinden önce bitirmesini engeller.Şablonlarda while ve endwhile Kullanımı
if ve for yapılarında olduğu gibi, while döngüsünün de HTML ile birlikte kullanımı için iki noktalı bir söz dizimi mevcuttur: while (...): ve endwhile;. Kodu çalıştırdığınızda bir geri sayım listesinin oluşturulduğunu görebilirsiniz.
PHP:
<?php
$n = 5;
?>
<ol reversed>
<?php while ($n > 0): ?>
<li><?= $n ?> second<?= $n === 1 ? '' : 's' ?> left</li>
<?php $n--; ?>
<?php endwhile; ?>
</ol>
<p>Done.</p>
Sık Yapılan Hata: Sonsuz Döngü
Döngüdeki sayaç, çıkış koşuluna doğru ilerlemelidir. Eğer
$i++ gibi artırımlar unutulursa veya yanlış değişken güncellenirse, koşul sonsuza dek true kalır. Web sunucularında çalışan bir PHP betiği, max_execution_time (varsayılan 30 saniye) süresi dolduğunda kritik bir hata ile durdurulur. Ancak komut satırında çalışan betikler durmaksızın devam eder.
PHP:
// Never ends: $i is never changed
$i = 0;
while ($i < 3) {
echo $i;
}
Bir işlemin yeniden denenmesi veya sonuçlar arasında sayfa sayfa ilerlemek gibi dış verilere bağlı döngülerde, güvenlik amacıyla bir sınır belirlemek etkili bir korumadır:
PHP:
<?php
$attempt = 0;
$maxAttempts = 5;
$success = false;
while (!$success && $attempt < $maxAttempts) {
$attempt++;
$success = random_int(1, 4) === 1; // pretend this is a network call
echo "Attempt $attempt: ", $success ? "ok" : "failed", "\n";
}
echo $success ? "Done\n" : "Gave up after $maxAttempts attempts\n";
Kodu birkaç kez çalıştırdığınızda bazen işlemin erken başarıyla tamamlandığını, bazen ise sınıra ulaşıp durduğunu göreceksiniz; ancak her durumda döngü sonlanacaktır. Eğer kaç tur döneceğinizi en baştan biliyorsanız, başlangıç, bitiş ve artış değerini tek satırda belirten
for döngüsünü kullanmak hata yapma riskini azaltır.Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)
Benzer konular
- Cevaplar
- 1
- Görüntüleme
- 13
- Cevaplar
- 2
- Görüntüleme
- 18
- Cevaplar
- 6
- Görüntüleme
- 39
- Cevaplar
- 2
- Görüntüleme
- 19
- Cevaplar
- 2
- Görüntüleme
- 24
