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.
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>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-9">
<meta 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.
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.
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.
//////////////////KUTU///////////////
PHP'nin programcıya çok kolaylık sağlayan bir diğer döngüsü, foreach döngüsüdür. Ancak bir değişkenin bütün elemanlarını tekrar sayısında esas alan bu döngünün çalışma ilkelerini görebilmek için dizi değişken kavramını ele almış olmamız gerekiyor. Şimdilik bu döngünün varlığını bir kenara yazıp, dizi değişkenlere kadar, unutabilirsiniz.
////////////////////KUTU BİTTİ///////////////
Programımızın akışı, bazen döngünün durdurulmasını gerektirir. Örneğin, sayaç değişkenini ziyaretçinin vermesi gerektiği ve vermediği durumda, döngünün başlamaması yerinde olur. Programın gerektirdiği böyle bir sebeple döngüyü break komutuyla durduruz.
Sözgelimi aşağıdaki kodda kullandığımız $tekrar değişkenini değerini ziyaretçiden form yoluyla aldığımızı varsayalım:
<?php
$tekrar = 10 :
for ($sayac = 1; $sayac <= $tekrar ; $sayac++ ) {
if ( $tekrar <= 0 )
break;
print ("<font size= $sayac >");
print ("<b><p>İyileri iyilikleri ile alkışlayınız!</b></p>");
print ("</font>");
}
?>
Bu kod parçasını, bir sayfa kodunun içine yerleştirir ve önce bu şekliyle, danha sonra $tekrar= 0 yazarak sınarsanız, break komutunun işe yaradığını göreceksiniz. ($tekrar değişkeninin değerini, Form yoluyla ziyaretçiden değişken değeri almayı öğreninceye kadar şimdilik kaydıyla biz yapıyoruz. Ayrıca buradaki if deyiminin süslü parantez olmadan yazıldığına dikkat edin.
break ifadesinin döngüyü tamamen durdurduğunu farkettiniz mi? Oysa programımızın akışı, kimi zaman da döngünün sadece belirli bir durumda kendisinden beklenen işi yapmamakla birlikte böyle tümüyle kesilmesini de gerektirmez. Yine yukarıdaki örneğe dönersek, sayaç değişkenini ziyaretçinin vermesi gerektiği ve vermediği durumda, döngünün tümüyle kesilmesini değil de, sadece sayacı gösteren $sayac değişkeninin sıfırdan büyük bir değere ulaşlmasını beklememiz yerinde olabilir. Bu devamlılığı continue komutuyla sağlarız:
Yine bu örnekte kullandığımız $sayaçc değişkeninin değerini ziyaretçiden form yoluyla aldığımızı varsayarak, kodu şöyle değiştirebiliriz:
<?php
$sayac = -5 :
for (; $sayac <= 7 ; $sayac++ ) {
if ( $sayac <= 0 )
continue;
print ("<font size= $sayac >");
print ("<b><p>İyileri iyilikleri ile alkışlayınız!</b></p>");
print ("</font>");
}
?>
Bu durumda PHP, conktinue komutunu gördüğü anda for döngüsünün geri kalan kısmını icra etmek yerine başa dönecek ve döngüyü yeniden icra etmeye başlayacaktır. Döngünün ilk satırınnda kod parçasını, bir sayfa kodunun içine yerleştirir ve önce bu şekliyle, danha sonra $sayac= 1 yazarak sınarsanız, continue komutunun programı sayaç değişkeninin değeri 1 oluncaya kadar durdurduğunu ama bu sırada for döngüsünün devam ettiğini göreceksiniz. ($sayac değişkeninin değerini, Form yoluyla ziyaretçiden nasıl alacağımızı daha sonra göreceğiz.)
Buraya kadar, PHP programı oluşturabilmek için gerekli temel yazım kurallarını, yapıtaşlarını ve program akışında yararlanacağımız kontrol ögelerini ele almış olduk. Şimdi bu unsurların hepsini bir arada kullanabileceğimiz grupları, fonksiyonları ele alabiliriz.
Fonksiyonlar
Bir bilgisayar programının kalbi, fonksiyonlardır. Fonksiyonlar, bir kere tanımlanır ve bir çok kereler, ihtiyaç olduğu noktada hizmete çağrılır. Fonksiyonlar genellikle bir iş veya hesaplama yaparlar ve bunun sonucu olarak ortaya yeni bir değer çıkartırlar. Bu değere "fonksiyondan dönen değer" denir.
Fonksiyonun bir program için ne kadar önemli bir unsur olduğunu bir örnekle belirtelim. Diyelim ki Web'de öğrencilerimizin yıl içinde aldıkları notları gösteren bir programımız var. Bu siteyi ziyaret eden öğrencilerin, iskterlerse, bir düğmeyi tıklayarak, o andaki not ortalamalarını hesap ettirmelerini sağlamak istiyoruz. Bu hesabı yapacak olan işlem, bir fonksiyondur. Web ziyaretçisi düğmeyi tıkladığı anda, program, ortalama hesabını yapacak olan fonksiyonu, o sayfada bulunan notları bildirecek; fonksiyon da kendisine verilen bu değerlerle yapması gereken hesabı yapacak; ve elde edeceği sonucu kendisini göreve çağıran program satırına bildirecektir. Bildirilen bu değerle ne yapılacağı, fonksiyonu göreve çağıran komuta veya işleme aittir. Fonksiyon kendisinden isteneni yapmakla yetinir.
PHP'nin kullanılmaya hazır bir çok fonskiyonu vardır. Şu ana kadar sürekli kullandığımız echo() ve print() bu tür PHP fonksiyonlarıdır. PHP'nin kendi fonksiyonlarını göreve çağırmak, yine yukarıdaki örneklerde olduğu gibi, program içinde gerektiği yere adını ve kullanacağı değeri yazmakla olur:
print ("Bu bir metindir!");
PHP bizim kendi fonksiyonlarımızı kullanmamıza da izin verir. Fakat bunun için önce fonksiyonu tanımlamamız gerekir. |