PHP Fonksiyonlar (Functions)

PHP’nin asıl gücü fonksiyonlardan gelir; 1000’den fazla yerleşik fonksiyona sahiptir. Yerleşik PHP fonksiyonlarının yanı sıra kendi işlevlerimizi de oluşturabiliriz. Bu yazıda kendi fonksiyonlarımızı nasıl oluşturabileceğimizi ele alacağız.

Fonksiyon bir programda tekrar tekrar kullanabileceğimiz kodlar bloğudur. Fonksiyonlar çağrıldıklarında çalışırlar.

 function functionName() {
    çalışacak kodlar;
}

Fonksiyon isimleri bir harf yada alt çizgi (_) ile başlayabilir. Sayı ile başlayamaz. Fonksiyonları isimlendirirken ne yaptığını yansıtan bir isim vermeniz yararlı olacaktır.

Fonksiyon isimleri büyük-küçük harfe duyarlı değildir.
<?php
function writeMsg() {
    echo "Merhaba Dünya!";
}

writeMsg(); // Fonksiyonu çağırdık.
?>

Fonksiyon Argümanları (Function Arguments )

Argüman ya da parametre diyebiliriz. Argümanları kullanarak fonksiyonlara bilgi gönderebiliriz.
Argümanlar bağımsız değişkenlerdir. Fonksiyon adından sonra parantez içerisinde belirtilir.

function familyName($name) {
    echo "$name Öksüz<br>";
}

familyName("Uğur"); //Ekrana Uğur Öksüz yazacaktır.

Örnekte “Uğur” bilgisini fonksiyona parametre olarak gönderdik. Bu bilgi fonksiyonun $name parametresine (bağımsız değişken demiştik) atandı ve fonksiyon içinde dilediğimiz gibi kullanabiliriz.

Aşağıdaki örnekte iki parametreli bir fonksiyonun tanımını görebilirsiniz.

<?php
function familyName($fname, $year) {
    echo "$fname Öksüz. $year <br>";
}

familyName("Uğur", "1987");
?>

PHP Gevşek Yazılan Bir Dildir 🙂

Yukarıdaki örneklerde değişkenlerin hangi türde olduğunu söylemedik. String ya da integer vs. her değeri gönderebiliriz.

PHP değerine bağlı olarak değişkenin türünü otomatik olarak ilişkilendirir. Veri tipleri kesin bir şekilde ayarlanmadığından tam sayı göndermemiz gereken bir yere string göndermiş olabilirdik.

PHP 7’de tür bildirimleri eklendi. Bu bize fonksiyon yazarken beklenen veri tipini bildirme seçeneği sunar ve katı gereksinimleri etkinleştirerek önemli hatalar düşmemizi önler.

Aşağıdaki örnekte önemli bir hata yapalım. Tabi bilerek 🙂

function addNumbers(int $a, int $b) {
    return $a + $b;
}
echo addNumbers(5, "5 gün"); 
// katı yazım kuralları etkin olmadığından "5 gün" ifadesi integer 5 olarak değişecek ve sonuç 10 olacaktır.

Aşağıdaki örnekte katı gereksinimleri etkinleştirerek bir integer değer yerine bir string göndermeyi deneyelim.

declare(strict_types=1); // Katı gereksinimleri etkinleştirdik.

function addNumbers(int $a, int $b) {
    return $a + $b;
}
echo addNumbers(5, "5 gün"); 
/* katı gereksinimler etkin olduğundan ve "5 gün" bir tam sayı olmadığından kod çalışmayacak ve bir hata döndürecektir. */

Katı (strict) gereksinimleri etkinleştirmek için declare(strict_types=1); php dosyamızın ilk satırına eklememiz gerekir.
Bu tanımlama dosyada yapılan fonksiyon çağrılarında belirtilen veri türlerine sıkı sıkıya uyulması gerektiğini belirtir.

PHP Varsayılan Argüman Değeri

Aşağıdaki örnek, varsayılan bir parametrenin nasıl kullanılacağını gösteriyor. SetHeight() fonksiyonunu argüman göndermeden çağırırsak, varsayılan değeri ele alır.

declare(strict_types=1); // katı gereksinimler

function setHeight(int $minheight = 50) {
    echo "Yükseklik : $minheight <br>";
}

setHeight(350);
setHeight(); // parametre olmadığından 50 değeri işlenecektir.
setHeight(135);
setHeight(80);

PHP Fonksiyon – Dönen değerler

Bir işlevin değer döndürmesini sağlamak için return ifadesini kullanırız.

declare(strict_types=1); //katı gereksinimler

function sum(int $x, int $y) {
    $z = $x + $y;
    return $z;
}

echo "5 + 10 = " . sum(5, 10) . "<br>";
echo "7 + 13 = " . sum(7, 13) . "<br>";
echo "2 + 4 = " . sum(2, 4);

Önceki örneklerde fonksiyona parametre gönderip ekrana yazdırmıştık. Bu örnekte ise fonkisondan return ile aldığımız değeri echo ile ekrana yazdırdık.

PHP Fonksiyon Dönüş Türü Bildirimi

PHP 7 fonksiyonlarda return edilen sonuç için bir tür bildirimi yapabilmemizi destekler. Katı gereksinimleri aktif ederek olası tür uyuşmazlıklarında hata döndürmesini sağlar.

Fonksiyonda dönen sonucun türünün ne olması istediğimi belirtmek için süslü parantezden hemen önce : ekleyerek dönüş türünü bildiririz.

Aşağıdaki örnekte, fonksiyon için dönüş türünü belirtiyoruz:

declare(strict_types=1); // katı gereksinimler
function addNumbers(float $a, float $b) : float {
    return $a + $b;
}
echo addNumbers(1.2, 5.2); 

Parametre olarak gönderdiğimiz bilgilerden farklı türde bir dönüş türü belirtebiliriz. Ancak return edilen sonucun türünün doğru tür olduğundan emin olmalıyız.

declare(strict_types=1); // strict requirement
function addNumbers(float $a, float $b) : int {
    return (int)($a + $b);
}
echo addNumbers(1.2, 5.2); // 6 sonucunu elde ederiz.

PHP Anonim Fonksiyonlar

İsim verilmeden tanımlanan fonksiyonlar anonim fonksiyonlar diyoruz.

$name = function(){
    return 'Uğur';
};

echo $name(); // Bu şekilde kullanılır.

// Parametre verebiliriz.
$name = function($name){
    return $name;
};

echo $name("uğur"); // Bu şekilde kullanılır.

anonim fonksiyonlar bir çok işe yarar kullanımı vardır.

$arr = [
    function(){
        return '1. fonksiyon';
    },
    function(){
        return '2. fonksiyon';
    },
    function(){
        return '3. fonksiyon';
    }
];

//echo $arr[2](); // ekrana dizinin 3. elemanı olan fonksiyonun sonucunu yazacaktır: "3. fonksiyon"

Ek Bilgi

fonksiyon dışında tanımlanan bir değişkeni kullanabilmek için:

$surname= 'Öksüz'; // fonksiyon dışında tanımlanmış bir değişken.

function func($name)
{
    global $surname;
    return $name. ' ' . $surname; 
}

echo func("uğur");

// $surname değişkenini anonim fonksiyonda kullanmak için

function($name) use($surname){
    return $name. ' ' . $surname;
}

Fonksiyona Sınırsız Parametre Gönderme


    /* -- Kullanılacak yardımcı fonksiyonlar
        func_num_args() -- gönderilen parametre sayısı
        func_get_args() -- gönderilen parametreleri dizi olarak verir
        func_get_arg()  -- indeks numarası verilen parametre değerini verir
    */

    function test()
    {
        echo func_num_args() . '<br>';
        print_r(func_get_args()) . '<br>';
        echo func_get_arg(2);
    }

    test('çay', 'kahve', 'kurabiye', 'kod');

2 Comments

Leave a Comment

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.