Php 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:
Kod:
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.
Fonksiyon Tanımlama ve Çağırma
PHP'de fonksiyonlar function komutu ile oluşturulur. Tanımladığımız fonksiyon,
kendisini göreve çağıracak komuittan, yapacağı işlemde kullanmak üzere değer alacaksa,
bu değerlere vereceğimiz değişken isimleri fonksiyon adının yanında parantez içinde
gösterilir. Fonksiyon birden fazla değer bekleyecekse, bunların değişken adlarının arasına
virgül koyarız. Fonksiyona ulaştırılan değerlere argüman denir. Fonksiyon, kendisine bir
değer ulaştırılmasını beklemese bile içi boş parantez koymamız gerekir. Buna göre PHP'de
fonksiyon şöyle yazılır:
Kod:
function fonksiyonun_adı (argüman1, argüman2, ... argümanN) { fonksiyonun yapacağı işe ilişkin komutlar }
Fonksiyon adları, değişken adları ile aynı kurallara tabidir. Fonksiyon içinden
fonksiyon çağrılabilir; fonksiyonların içinde PHP'nin kendi fonksiyonları kullanılabilir. Şimdi,
ilk örnek fonksiyonumuzu yazalım.
Yukarıdaki örneklerde, PHP'ye, bir Web sayfası oluştururken HTML ögesi olacak bazı
satırların başına <H1>, satır sonlarına <BR> gibi etiketler koydurduğumuza dikkat etmiş
olmalısınız. Bir programda bu işi sık sık yapacaksak, yani metinlerimiz <BR> ile bitecek,
bazı başlıklarımız ise sayfamıza HTML'in başlık etiketleri ile gönderilecekse, bu etiketleri
defalarca yazmamız sadece zorluk değil, fakat aynı zamanda yazım hatasını davet eden bir
davranır olur. PHP'de kendisine vereceğimiz metinleri başlık veya gövde yazısı olarak
biçimlendirecek fonksiyonlar tanımlayarak, programcılıkta daima tehlikeli olan insan
unsurunu asgarîye indirebiliriz. Şu programı yazdir01.php adıyla kaydederek, Browser'da
açın:
Kod:
<HTML>
<HEAD>
<TITLE>PHP'de Fonksiyon</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 function yazdirBR ($metin) {
print ("$metin<br>\n");
}
function yazdirH1 ($metin) {
print ("<h1>$metin</h1>\n");
} function yazdirH2 ($metin) {
print ("<h2>$metin</h2>\n");
} function yazdirH3 ($metin) {
print ("<h3>$metin</h3>\n");
} function yazdirH4 ($metin) {
print ("<h4>$metin</h4>\n");
} function yazdirP ($metin) {
print ("<p>$metin</p>\n");
} // Başka kodlar buraya girebilir
yazdirH1("Bu H1 Başlık");
yazdirH2("Bu H2 Başlık");
yazdirH3("Bu H3 Başlık");
yazdirH4("Bu H4 Başlık");
yazdirBR("Bu kendisinden sonra BR olan birinci metin.");
yazdirBR("Bu kendisinden sonra BR olan ikinci metin.");
yazdirP("Bu uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun bir paragraf metni.");
yazdirP("Bu uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun bir diğer paragraf metni.");
?>
</BODY>
</HTML>
Bu programda, yazdirBR(), yazdirH1(), yazdirH3(), yazdirH4(), ve yazdirP()
adlarıyla altı fonksiyon tanımladığımızı görüyorsunuz. Bu fonksiyonların hepsi kendilerini
göreve çağıran satırdan, kendilerine bir değer verilmesini istiyorlar ve bu değeri $metin
adlı değişkende tutuyorlar. Fonksiyonlarımız tümü de PHP'nin print() fonksiyonundan
yararlanıyor; ancak bu fonksiyonun nasıl kullanılacağını, nasıl işletileceğini de belirliyorlar.
Buna göre bazı fonksiyonlarımız $metin adlı değişkenin değerini önüne ve arkasına bir
HTML etiketi koyarak Browser'a gönderiyor; birisi ise sadece $metin değişkenin tuttuğu
değerin sonuna bir HTML etiketi koyduruyor. Fonksiyonlarımı buradaki örnekte olduğu gibi
hemen oluşturulduktan sonra göreve çağırmayız. Geleneksel olarak, bir programda
kullanılacak fonksiyonlar, programın baş tarafında toplanır ve daha sonra nerede gerekirse
orada, çağrılırlar. Fonksiyonları adlarını ve kendilerine verilmesi gereken bir değer varsa o
değeri parantez içinde yazarak çağırırız. Burada olduğu gibi, fonksiyonu göreve çağırırken
parantez içinde değerin kendisini yazabileceğimiz gibi, bu değeri tutan bir değişkenin adını
da yazabiliriz. Bu programı çalıştırırsanız, Browser'da bu görüntüyü elde edebilirsiniz:
Şimdi, bu penceredeki belgenin kaynağını görüntüleyelim. Karşımıza şuna benzer
bir metin çıkmış olması gerekir:
Kod:
<HTML>
<HEAD> <TITLE>PHP'de Fonksiyon</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>
<h1>Bu H1 Başlık</h1>
<h2>Bu H2 Başlık</h2>
<h3>Bu H3 Başlık</h3>
<h4>Bu H4 Başlık</h4>
Bu kendisinden sonra BR olan birinci metin.<br> Bu kendisinden sonra BR olan ikinci metin.<br> <p>Bu uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun bir paragraf metni.</p> <p>Bu uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun uzun bir diğer paragraf metni.</p> </BODY>
</HTML>
Bu, bize, oluşturduğumuz bütün fonksiyonların kendilerinden bekleneni yaptığını ve
kendilerine verdiğimiz metinleri, tıpkı istediğimiz gibi, arzu edilen HTML etiketleri ile
birlikte Browser'a gönderdiklerini gösteriyor.
Buradaki fonksiyon, kendisini bir iş yapan türden fonksiyondur. Oysa kimi zaman
fonksiyonlar, kendilerini göreve çağıran komuta bir değer gönderirler. Şimdi de böyle bir
fonksiyon örneği yazalım. Aşağıdaki kodu, hesapla.php adıyla kaydedin:
Kod:
<HTML>
<HEAD>
<TITLE>PHP'de Fonksiyon</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
function topla ($sayi1, $sayi2) {
$sonuc = $sayi1 + $sayi2;
return $sonuc;
} function cikart ($sayi1, $sayi2) {
$sonuc = $sayi1 - $sayi2;
return $sonuc;
} function carp ($sayi1, $sayi2) {
$sonuc = $sayi1 * $sayi2;
return $sonuc;
} function bol ($sayi1, $sayi2) {
$sonuc = $sayi1 / $sayi2; return $sonuc;
} // Başka kodlar buraya girebilir
$sayi1 = 12; $sayi2 = 5;
print topla($sayi1, $sayi2);
print ("<br>");
print cikart($sayi1, $sayi2);
print ("<br>");
print carp($sayi1, $sayi2);
print ("<br>");
print bol($sayi1, $sayi2);
print ("<br>"); ?>
</BODY>
</HTML>
Bu programda, dört aritmetik işlemi yapan dört ayrı fonksiyon tanımlıyoruz.
Fonksiyonlarımız kendilerini göreve çağıran komuttan, kendilerine iki değer vermesini
bekliyorlar ve bu değerleri $sayi1 ve $sayi2 adlı değişkenlere yazıyorlar. Sonra herbiri,
kendisinden beklenen aritmetik işlemi yaparak, sonucunu $sonuc adlı değişkene yazıyor.
Burada dikkat edeceğimiz nokta, return komutudur. Bu komut, f onksiyonun elde ettiği
değeri, değeri tutan değişkenin adıyla, fonksiyonu çağırmış olan satıra gönderir. return
komutuyla, kendisini göreve çağıran satıra değil fakat mesela başka bir fonksiyona da
değer gönderebiliriz:
Kod:
return ( baska_fonksiynon ( $degisken)) ;
Fonksiyonun return satırında böyle bir başka fonksiyonun adı yazmıyorsa, bulunan
değer göreve çağıran satıra gönderilir.
Bu program, içine bizim yazdığımız iki değeri hesaplayarak, Browser'a
gönderecektir. Ancak bu değerler ziyaretçinin dolduracağı bir formdan alınabileceği gibi,
program tarafından da hesaplanabilir
Bu sayfanın kaynağındaki HTML kodları ise şöyla olacaktır:
Kod:
<HTML>
<HEAD>
<TITLE>PHP'de Fonksiyon</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> 17<br>7<br>60<br>2.4<br>
</BODY>
</HTML>
Fonksiyonlarımız, kendilerinden bekleneni yaparak, gereken hesaplamanın
sonucunu, kendilerini göreve çağıran komuta, burada PHP'nin print() fonksiyona
göndermiş; bu fonksiyon da sadece bu sonuçları Browser'a iletmiş bulunuyor.