PHP: Fonksiyonlar
Dinamik olarak kullanılabilen altprogramlar biçiminde tanımlayabileceğimiz fonksiyonlar, PHP dilinin gücünü aldığı en önemli bileşenlerdir. Şöyle ki, günümüzde yazılmış 1000’den fazla dahili PHP fonksiyonu bulunmaktadır. Bunlara anonim olarak yazılmış ve İnternetten ulaşılabilen binlerce kullanıcı-tanımlı fonksiyonu da katarsak, konunun önemi ortaya çıkacaktır.
Fonksiyonları yazma amacımız, çeşitli programlar tarafından kullanılan, ya da aynı program içerisinde tekrarlanması gereken işlevsel kodları tekrar kullanılabilir programcıklar olarak oluşturmaktır. Bu programcıklar, ana program ile iki yönlü olarak veri alışverişinde bulunabilirler. Kendi kendilerine çalışmazlar, sadece ana program tarafından çağırıldıklarında çalışırlar.
Kullanıcı tanımlı fonksiyonlar, PHP dilini kullanarak uygulama geliştirenler tarafından yazılan fonksiyonlardır. Bunlar İnternet üzerinden yoğun olarak paylaşılmaktadır.
Dahili fonksiyonlar ise doğrudan PHP çözümleyicisi tarafından denetlenen, PHP geliştirme grubu tarafından yazılmış kullanıma hazır fonksiyonlardır.
Kendi programlarınızda kullanmak üzere, kendi fonksiyonlarınızı yazabilirsiniz. Bunun için genel olarak aşağıdaki gibi tanımlama yapmanız yeterli olacaktır:
1 2 3 4 5 | <?php function fonksiyonAdi(){ //fonksiyon tarafından çalıştırılacak kodlar; } ?> |
Bu şekilde tanımlanan bir fonksiyonu çağırmak için adını yazmamız yeterli olacaktır.
Basit bir örnekle başlayalım. İşlevi; ekrana adınızı yazmak olan bir fonksiyon tanımlayalım ve onu ana programımızdan çağırarak kullanalım.
1 2 3 4 5 6 7 | <?php function adimiYaz(){ echo "Kamil ERSÖNMEZ"; } echo "Benim adım "; adimiYaz(); ?> |
HTML çıktısı: Benim adım Kamil ERSÖNMEZ olacaktır.
Kullanıcı Tanımlı Fonksiyonlar
Kullanıcı Tanımlı Fonksiyonlar diğer adıyla User Defined Functions; adından da anlaşılabileceği gibi program içerisinde benzer kodları farklı yerlerde çalıştırılması ve bu kodları her seferinde tekrar tekrar yazmaması için programı yazan kullanıcı tarafından oluşturulan fonksiyonlardır.
Yukarıda oluşturulan fonksiyon tanımı, PHP tarafından doğrudan çalıştırılmaz çünkü kullanıcı tarafından oluşturulmuştur. Bu fonksiyonu çalıştırmak için ana program bloğu içerisinden çağrılması gereklidir.
Kullanıcı Tanımlı Fonksiyonlar – Parametreler ve Dönen Değerler
Fonksiyonlar, ana programdan farklı türlerde veriyi alabilirler. Değerleri ana programdan fonksiyonlara taşıyan bu yapılara parametre adı verilir.
Bir fonksiyon, parametreleri kullanarak ya doğrudan bir işlevi yerine getirir, ya da ana program için bir değer üretir. Eğer bir değer üretmiş ise bu değerin ana programa döndürülmesi için kullanılan deyim, “return” deyimidir.
1 2 3 4 5 6 7 8 | <?php function adimiYaz($ad){ echo "$ad ERSÖNMEZ"; } echo "Benim adım "; adimiYaz("Kamil"); echo "<br>Kardeşimin adı ise "; adimiYaz("Kâni"); ?> |
Sonuç:
1 2 | Benim adım Kamil ERSÖNMEZ Kardeşimin adı ise Kâni ERSÖNMEZ |
Aşağıdaki örnekte ise, fonksiyon tarafından üretilen değer ana programa gönderilmektedir.
1 2 3 4 5 6 7 8 | <?php $Gelir=1100; function Vergi_Dus ($Geliriniz){ $Geliriniz = $Geliriniz -(($Geliriniz/100)*20); return $Geliriniz; } echo "$Gelir TL gelirin vergi düşülmüş hali " . Vergi_Dus($Gelir) . " TL'dir."; ?> |
Sonuç: 1100 TL gelirin vergi düşülmüş hali 880 TL'dir.
Diğer bir örnek olarak, Akış Kontrol Deyimleri konumuzda yer alan Switch/Case ile yaptığımız tek basamaklı bir sayının Türkçe okunuşunu yazacak programı, bu defa fonksiyon kullanarak tasarlayalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | <?php function TurkceOku($Gelen_Sayi){ switch ($Gelen_Sayi){ case "0": $sonuc="SIFIR"; break; case "1": $sonuc="BİR"; break; case "2": $sonuc="İKİ"; break; case "3": $sonuc="ÜÇ"; break; case "4": $sonuc="DÖRT"; break; case "5": $sonuc="BEŞ"; break; case "6": $sonuc="ALTI"; break; case "7": $sonuc="YEDİ"; break; case "8": $sonuc="SEKİZ"; break; case "9": $sonuc="DOKUZ"; break; default: $sonuc="-"; } } $Sayi=8; echo "$Sayi Sayısının Türkçe Okunuşu : "; echo(TurkceOku($Sayi)); ?> |
Dahili Fonksiyonlar
Dahili fonksiyonlar, gün geçtikçe artan sayıları itibarı ile herhangi bir ders kapsamında bütün detayı ile ele alıp anlatılabilecek bir konu değildir. Bu fonksiyonların öğrenilmesi daha çok, gereksinim duydukça referans kaynakları vasıtasıyla gerçekleşmektedir.
Bu bölümde, dahili fonksiyonların kullanımına yönelik bazı örnek programlar vereceğiz.
Aşağıdaki örnek program öncelikle scandir klasör fonksiyonunu kullanarak etkin klasörde yer alan “proje” klasörünün içeriğini almakta, daha sonra print_r dizi fonksiyonu bu bilgiyi bir dizi formatında ekrana yazdırmaktadır.
1 2 3 | <?php print_r(scandir("proje")); ?> |
Sonuç:
1 2 3 4 5 6 7 8 9 10 11 | Array ( [0] => . [1] => .. [2] => Proje0001.rar [3] => Proje0002.rar [4] => Proje0003.rar [5] => Proje0004.rar [6] => Proje0005.rar [7] => Proje0006.rar ) |
Aşağıdaki örnekte programın çalışması bir hata (error) fonksiyonu kullanılarak durdurulmakta ve hata mesajı verilmektedir.
1 2 3 4 5 6 | <?php $sayi=1; if ($sayi<2){ trigger_error("Kullanıcı tanımlı hata durumu tetiklendi."); } ?> |
Yuvarlama fonksiyonlarının kullanıldığı bir örnek aşağıda verilmiştir.
1 2 3 4 5 6 7 8 | <?php echo "ceil(6.1)=",ceil(6.1); echo "<hr>"; echo "ceil(7.9)=",ceil(7.9); echo "<hr>"; echo "round( 13.4)=",round( 13.4); echo "<hr>"; echo "round( 32.5)=",round( 32.5); echo "<hr>"; echo "floor(8.1)=",floor(8.1); echo "<hr>"; echo "floor(4.9)=",floor(4.9); echo "<hr>"; ?> |
Sonuç:
1 2 3 4 5 6 7 8 9 10 11 12 | ceil(6.1)=7 -------------------- ceil(7.9)=8 -------------------- round( 13.4)=13 -------------------- round( 32.5)=33 -------------------- floor(8.1)=8 -------------------- floor(4.9)=4 -------------------- |
Karekökü tamsayı olan sayılara “tam kare sayılar” adı verilir.
Örneğin 4, karekökü olan 2 tamsayı olduğundan bir tam karedir. 9, 16 ve 25 de tam kare sayılardır, ancak 5,6,7,8 değildir.
Şimdi yazacağımız PHP programı, 1 ile 1000 arasındaki tam kare sayıları listeleyecektir.
1 2 3 4 5 6 7 8 9 | <?php $sayi = 1; while($sayi <= 1000){ if(floor(sqrt($sayi))==sqrt($sayi)){ echo "$sayi", "<br>"; } $sayi ++; } ?> |
Bu örnekte dikkat etmemiz gereken nokta, sayının karekökünün tamsayı olup olmadığının anlaşılması için PHP fonksiyonlarının nasıl kullanıldığıdır.
Bu işlem için iki matematik fonksiyonu kullanılmıştır: floor ve sqrt.
Eğer bir sayının karekökünün tam kısmı, sayının kareköküne eşit ise o sayı bir tam kare sayıdır:
if (floor(sqrt($sayi))==sqrt($sayi))
Şimdi string fonksiyonlarını kullanan bazı örnek programlar tasarlayalım.
İlk örneğimiz, 1949 yılında Hintli matematikçi Kaprekar tarafından tanımlanan Kaprekar sayıları ile ilgili olsun.
n basamaklı bir t Kaprekar sayısının karesi alınıp sağdaki n basamağı solda kalan n-1 basamağa eklendiğinde sonuç yine t sayısını verir.
Örneğin; 55, iki basamaklı bir sayıdır.
55² = 3025, sağdan iki basamak 25, soldan iki basamak 30.
Bu iki sayının toplamı 30+25=55 yani sayının kendisidir.
1, 9, 45, 55, 99, 297, 703, 999, 2223, 2728, 4950 sayıları da diğer bazı Kaprekar sayılarıdır.
Yazacağımız program, bir for döngüsü içerisinde 1 ile 100.000 arasındaki bütün Kaprekar sayılarını substr fonksiyonunu kullanarak listelesin.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?php $ust = 100000; for ($sayi = 9; $sayi <= $ust; $sayi++){ $basamak = strlen($sayi); $sayi2 = $sayi * $sayi; $basamak2 = strlen($sayi2); $soltaraf = substr($sayi2, 0, $basamak2-$basamak); $sagtaraf = substr($sayi2, $basamak2-$basamak,$basamak); $toplam = $soltaraf + $sagtaraf; if($toplam == $sayi && $sayi != 10){ echo "BULUNDU : $sayi <br>"; } } ?> |
Bu örneğimizde, kullanıcının adını, soyadını ve e-posta uzantısını kullanarak e-posta adresini otomatik olarak oluşturacak programı yazalım.
Uygulamamız e-posta adresini şu kurala göre oluştursun:
[Adın ilk harfi].[Soyad]@[e-posta uzantısı]
Örneğin adı Kamil, soyadı ERSÖNMEZ olan bir kullanıcı için, paint.com.tr eposta uzantısına göre, [email protected] e-posta adresi oluşturulsun.
Burada çözmemiz gereken en önemli problem, Türkçe harflerin benzer İngilizce harflere dönüştürülmesidir. Örneğin “ğ” harfinin “g” harfine dönüştürülmesi gibi.
Bunu bizim için, yazacağımız bir dönüşüm fonksiyonu yapacaktır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | <?php function turkceharf_donustur ($harf){ switch ($harf) { case "ç": $harf="c"; break; case "ğ": $harf="g"; break; case "ö": $harf="o"; break; case "ş": $harf="s"; break; case "ü": $harf="u"; break; case "İ": $harf="i"; break; case "ı": $harf="i"; break; } return $harf; } function eposta_olustur ($adi, $soyadi){ $adilk=strtolower(substr($adi,0,1)); $soyad=strtolower($soyadi); $eposta = $adilk.".".$soyad; $yeni_eposta=""; for ($i = 0; $i <= strlen($eposta); $i++){ $yeni_eposta=$yeni_eposta.turkceharf_donustur(substr($eposta,$i,1)); } return $yeni_eposta; } $ad = "Kamil"; $soyad = "ERSÖNMEZ"; $e_posta = "paint.com.tr"; echo "<p>e-posta adresi : "; echo eposta_olustur($ad,$soyad)."@".$e_posta; ?> |
Yazdığımız turkceharf_donustur() fonksiyonu, kendisine gelen Türkçe harfi benzeri İngilizce harfe dönüştürmektedir.
Önce adın ilk harfi ile soyad küçük harfe dönüştürülerek ve araya nokta işareti konularak birleştirilmektedir. Daha sonra oluşturulan bu string, harf harf fonksiyonumuza gönderilmekte ve içerisinde bulunan Türkçe harfler dönüştürülmektedir.
Sonuç olarak elde edilen string, e-posta uzantısı ile birleştirilmek üzere e-posta adresi elde edilmektedir.
Aynı işleve sahip, ancak kodu önemli ölçüde azaltacak başka bir yöntemde, dönüştürme işleminde diziler kullanılmaktadır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?php function Tr_Donustur($gelen_metin){ $gelen_metin = trim($gelen_metin); $aranan_harfler = array('ç',‘ğ',‘ı','ö',‘ş','ü',‘İ'); $degistirilecek_harfler=array('c','g','i','o','s','u','i'); return; str_replace($aranan_harfler,$degistirilecek_harfler,$gelen_metin); } $ad = "Kamil"; $soyad = "ERSÖNMEZ"; $e_posta = "paint.com.tr"; echo "<p>e-posta adresi : "; echo Tr_Donustur(strtolower($ad[0].".".$soyad))."@".$e_posta; ?> |
Şimdilik fonksiyonlar konumuzun sonuna geldik.
- 7 Mart 2022
Diğer Yazılarımız
Tüm Yazılarımız
Soru işareti kalmasın
Bu yazı hakkında aklınıza takılanlar, bir fikriniz belkide şikayetiniz vardır. Yada yazımızda hatalar olduğunu düşünüyor olabilirsiniz. Peki neden bize ulaşmayı düşünmeyesiniz ki?
Hizmetlerimiz
Binlerce müşterimizin yararlandığı 100'e yakın hizmetlerimizden sizlerde yararlanabilirsiniz. Onlarca ücretsiz web hizmeti ve profesyonel destekle sizleri daima daha ileriye taşımayı hedefliyoruz.
Tüm Yenilik ve Kampanyalardan Haberdar Ol
Son Yazılar
- CSS Grid Kullanımı Başlangıç Rehberi 1 Ocak 2025
- C# While Döngüsü Kullanımı 1 Ocak 2025
- C# ile Dosya Okuma ve Yazma İşlemleri 29 Aralık 2024



