Web geliştirme serüvenimizde şu ana kadar değişkenleri, veri tiplerini, karar yapılarını ve döngüleri öğrendik. Programlarımıza bir miktar zekâ katmayı ve tekrar eden işlemleri otomatikleştirmeyi başardık. Ancak kodlarınız uzadıkça ve programlarınız karmaşıklaştıkça, aynı kod bloklarını (örneğin bir formun doğruluğunu kontrol etme veya bir matematiksel işlem yapma) projenin farklı yerlerinde defalarca yazdığınızı fark edeceksiniz.
İşte bu noktada, yazılım dünyasının en büyük hayat kurtarıcılarından biri olan “Fonksiyonlar” (Functions) devreye girer. Bu rehberde, PHP’de fonksiyonların ne olduğunu, nasıl tanımlandıklarını, parametre ve değer döndürme mantığını günlük hayattan basit örneklerle öğreneceğiz.
Fonksiyon (Function) Nedir? (“Sihirli Kutu” Analojisi)
En basit tabiriyle bir fonksiyonu, içine bir şeyler koyduğunuz, bu koyduğunuz şeyleri kendi içinde işleyen ve size yepyeni bir sonuç veren “sihirli bir kutu” olarak düşünebilirsiniz.
Örneğin, bir kıyma makinesi bir fonksiyondur. İçine et (girdi) koyarsınız, makine çalışır (işlem) ve size kıyma (çıktı) verir. PHP’deki fonksiyonlar da tam olarak böyle çalışır; onlara bir isim verirsiniz, ihtiyaç duyduğunuzda bu isimle onları çağırırsınız, onlara bazı veriler (girdiler) verirsiniz, onlar da işini yapıp size bir çıktı sunar,.
Neden Fonksiyon Kullanmalıyız?
Kodlarınızı fonksiyonlar içine paketlemenin dört büyük avantajı vardır:
- Daha Az Kod Yazarsınız: Aynı kodu tekrar tekrar yazmaktan kurtulursunuz. Örneğin, bir web sitesindeki tüm sayfaların başlığını değiştiren bir kodunuz varsa, bunu her sayfaya kopyalamak yerine bir fonksiyona koyup her sayfada sadece o fonksiyonu çağırabilirsiniz.
- Modülerlik ve Okunabilirlik: Fonksiyonlar, devasa bir programı küçük, yönetilebilir ve anlaşılır parçalara böler. Hangi kodun ne iş yaptığı, fonksiyon isimlerinden kolayca anlaşılır.
- Tekrar Kullanılabilirlik (Reusability): Bir fonksiyonu bir kez oluşturduktan sonra, onu aynı projenin farklı yerlerinde, hatta tamamen farklı projelerde defalarca kullanabilirsiniz.
- Kolay Hata Ayıklama (Debugging): Kodunuzda bir hata çıkarsa, yüzlerce satır kod içinde kaybolmak yerine, sadece ilgili görevi yapan fonksiyona giderek hatayı çok daha hızlı tespit edip düzeltebilirsiniz. Tek bir yerde yaptığınız düzeltme, fonksiyonun kullanıldığı her yere anında yansır.
PHP’de Fonksiyon Nasıl Oluşturulur ve Çağrılır?
PHP’de kendi fonksiyonunuzu tanımlamak son derece kolaydır. Her fonksiyon üç temel bileşenden oluşur: argümanlar (girdiler), fonksiyon gövdesi (işlemin yapıldığı kodlar) ve dönüş değerleri (çıktılar).
Bir fonksiyon tanımlarken her zaman function anahtar kelimesi ile başlarız. Ardından fonksiyona bir isim verir, parantez () açıp kapatır ve son olarak süslü parantezler { } arasına çalışacak kodlarımızı yazarız. Fonksiyon isimleri harf veya alt çizgi (_) ile başlamalıdır, boşluk veya özel noktalama işareti içeremez.
Örnek 1: Basit Bir Fonksiyon
<?php
// Fonksiyon Tanımlama
function bugunGunlerdenNe() {
echo "Bugün günlerden " . date('l');
}
// Fonksiyonu Çağırma (Çalıştırma)
bugunGunlerdenNe();
?>
Yukarıdaki kodda bugunGunlerdenNe adında bir fonksiyon oluşturduk ve içine ekrana günün adını yazdıran bir kod koyduk,. Ancak unutmayın; bir fonksiyonu sadece tanımlamak onun çalışması için yeterli değildir. O sihirli kutunun çalışması için ana programın içinde adını yazarak onu çağırmanız (invoke) gerekir.
Parametre (Argüman) Alan Fonksiyonlar
Sürekli aynı sonucu veren bir fonksiyon, bütün gün aynı şarkıyı çalan bir radyo istasyonu gibidir; pek kullanışlı veya ilginç değildir! Asıl istediğimiz, dinleyicilerden (kullanıcılardan) gelen isteklere göre farklı şarkılar çalan bir sistemdir. Fonksiyonlara bu yeteneği kazandırmak için parantezlerin içine Parametreler (Argümanlar) ekleriz.
Örnek 2: Dikdörtgen Çevresi Hesaplama
<?php
// Fonksiyon 2 adet argüman (girdi) kabul ediyor: $uzunluk ve $genislik
function cevreHesapla($uzunluk, $genislik) {
$cevre = 2 * ($uzunluk + $genislik);
echo "Uzunluğu $uzunluk, genişliği $genislik olan dikdörtgenin çevresi: $cevre";
}
// Fonksiyonu farklı girdilerle çağırıyoruz
cevreHesapla(4, 2); // Çıktı: 12
echo "<br>";
cevreHesapla(10, 5); // Çıktı: 30
?>
Bu örnekte sihirli kutumuza (fonksiyona) dışarıdan iki farklı sayı gönderdik ve o da bize bu sayılara özel bir sonuç üretti.
Varsayılan (Default) Argüman Değerleri Belirleme
Bazen fonksiyonu çağırırken bir girdi vermeyi unutabiliriz veya bir girdinin standart (varsayılan) bir değeri olmasını isteyebiliriz. Bu durumda, fonksiyonu tanımlarken değişkene bir ilk değer atayabiliriz.
Örnek 3: Varsayılan Parametre Kullanımı
<?php
// İkinci parametreye varsayılan bir domain atadık
function emailOlustur($kullaniciAdi, $domain = 'ornekdomain.com') {
echo "E-posta adresiniz: " . $kullaniciAdi . "@" . $domain . "<br>";
}
// Sadece kullanıcı adı gönderirsek varsayılan domain kullanılır
emailOlustur('ahmet'); // Çıktı: [email protected]
// İki bilgiyi de gönderirsek bizim gönderdiğimiz domain kullanılır
emailOlustur('ayse', 'sirketim.net'); // Çıktı: [email protected]
?>
Eğer fonksiyonu çağırırken ikinci bir değer girmezsek, PHP otomatik olarak bizim tanımladığımız ‘ornekdomain.com’ değerini kullanacaktır.
return ile Fonksiyondan Değer Döndürme
Önceki örneklerimizde fonksiyonların ürettiği sonuçları doğrudan echo ile ekrana yazdırdık. Ancak gerçek projelerde, fonksiyonun bulduğu sonucu hemen ekrana yazdırmak yerine, bu sonucu alıp başka bir hesaplamada veya veritabanı işleminde kullanmak isteriz. İşte fonksiyonun ürettiği çıktıyı ana programa geri yollaması işlemine “değer döndürme” denir ve bu işlem return komutu ile yapılır-.
<?php
// Çevreyi ekrana yazdırmak yerine "return" ile geri döndürüyoruz
function cevreHesaplaGelistirilmis($uzunluk, $genislik) {
$cevre = 2 * ($uzunluk + $genislik);
return $cevre;
}
// Fonksiyondan dönen sonucu yeni bir değişkene atayabiliriz
$hesaplananSonuc = cevreHesaplaGelistirilmis(4, 2);
// Sonucu kendi istediğimiz bir cümleyle birleştirebiliriz
echo "Hesaplanan nihai sonuç " . $hesaplananSonuc . " metredir.";
?>
Önemli Bir Kural: PHP, bir fonksiyonun içinde return komutunu gördüğü anda o fonksiyonun çalışmasını derhal durdurur ve ana programa geri döner. return satırından sonra yazılan hiçbir kod çalışmaz.
Değişken Kapsamı (Variable Scope) ve global Kullanımı
Fonksiyonlar konusunda yeni başlayanların en çok kafasını karıştıran kavram “Değişken Kapsamı” (Scope) konusudur. Varsayılan olarak, bir fonksiyonun içinde oluşturduğunuz tüm değişkenler yereldir (local). Yani bu değişkenler sadece o fonksiyonun duvarları içerisinde yaşarlar ve dış dünyadan, ana programdan onlara ulaşılamaz. Aynı şekilde, fonksiyon da ana programda tanımlanan değişkenleri göremez.
<?php
$puan = 11; // Bu ana programdaki küresel (global) bir değişken
function puaniDegistir() {
$puan = 25; // Bu sadece bu fonksiyonun içindeki yerel bir değişken!
}
puaniDegistir();
echo "Güncel Puan: " . $puan; // Çıktı yine 11 olur, 25 olmaz!
?>
Yukarıdaki örnekte fonksiyonu çağırsak bile dışarıdaki $puan değişmez, çünkü fonksiyon içeride kendi çapında yeni bir $puan kutusu oluşturmuştur. Eğer fonksiyonun dış dünyadaki bir değişkene gerçekten müdahale etmesini istiyorsanız, onu fonksiyona global (küresel) anahtar kelimesiyle tanıtmanız gerekir.
<?php
$puan = 11;
function gercektenPuaniDegistir() {
global $puan; // "Dışarıdaki $puan değişkenini kullanacağım" diyoruz
$puan = 25;
}
gercektenPuaniDegistir();
echo "Güncel Puan: " . $puan; // Çıktı şimdi 25 olur!
?>
İleri Seviye Bilgi: Dinamik Argüman Listeleri
Son olarak, bazen bir fonksiyonun tam olarak kaç tane girdi (parametre) alacağını önceden bilemeyebilirsiniz. Örneğin, içine kaç tane sayı gönderilirse gönderilsin hepsinin ortalamasını alan bir fonksiyon yazmak isteyebilirsiniz.
PHP, bu gibi durumlar için özel fonksiyonlara sahiptir. func_num_args() komutu fonksiyona kaç adet argüman gönderildiğini bulur, func_get_args() ise gönderilen tüm bu argümanları bir Dizi (Array) halinde size teslim eder. Bu sayede sınırsız sayıda parametre kabul eden çok esnek fonksiyonlar yazabilirsiniz.
Sonuç
Fonksiyonlar, spagetti (karmakarışık) gibi uzayıp giden kod yığınlarını alıp, derli toplu, profesyonel ve lego parçaları gibi birbiriyle uyumlu çalışan sistemlere dönüştürür. “Sihirli kutularınızı” yani fonksiyonlarınızı function komutuyla oluşturmayı, argümanlarla onlara veri taşımayı ve return komutuyla bu verileri geri almayı kavradığınızda, PHP’de çok daha az kodla çok daha büyük işler yapabildiğinizi göreceksiniz. Modüler kodlama dünyasına attığınız bu sağlam adımdan sonra, modern PHP dünyasının belkemiği olan “Nesne Yönelimli Programlama” (Sınıflar ve Objeler) konusunu kavramanız çok daha kolay olacaktır.





