Php dilinde fonksiyonlar
6237 0

Fonksiyonlar temelde, defalarca yapılacak işlemlerinizi, bir defa yazıp tekrar tekrar tekrar kullanabilmeniz için kullanılan yapılardır. Ne cümle kurdum ama! En iyisi görerek devam edelim.

Fonksiyon Yazım Şekli

<?php
function fonksiyonAdi(){
    //Yapılacak işlemler
}
?>

Temelde yazım şekli böyledir. Fonksiyonlar ile alakalı bilinmesi gerekn en önemli şeylerden biri fonksiyonlar siz kullanmsadığınız sürece derlenmez. Bu şu demek sadece yazım kontrolü yapılr, bir yazım hatası var mı diye. Bunun haricinde 1000 satırlık fonksiyon kodunuz da olsa başlangıçta çalıştırılmaz. Ne zaman siz fonksiyonu çağırırsınız o zaman çalıştırılır. Bu da yazdığımız kodlara hız ve düzen getireceği anlamına gelir. Tarayıcıya "Merhaba Kullanıcı" mesajı veren fonksiyon örneği;

<?php
function mesajVer(){
    echo "Merhaba Kullanıcı";
}

mesajVer(); //Tarayıcıya "Merhaba Kullanıcı" yazar
?>

Fonksiyonlarda Parametre Belirtme

Parametre dediğimiz kavram, fonksiyona değer göndermek istediğimizde ortaya çıkar.

<?php
function mesajVer($isim){
    echo "Merhaba $isim";
}

mesajVer("Yılmaz"); //Tarayıcıya "Merhaba Yılmaz" yazar
$adSoyad="Necati Durmaz";
mesajVer($adSoyad); // Tarayıcıya "Merhaba Necati Durmaz" yazar
?>

Örnekte gördüğünüz gibi isim bilgisi parametre olarak gönderilmiştir. Parametre birden fazla da olabilir. Örneği şöyle yapalım, kaç defa dersek o kadar yazdıralım.

<?php
function mesajVer($isim,$kacDefa){
    for($i=1;$i<=$kacDefa;$i++){
        echo "Merhaba $isim <br/>";
    }
}

mesajVer("Yılmaz",5); //5 defa alt alta "Merhaba Yılmaz" yazar
?>

Parametrelere İlk Değer Ataması

En son yaptığımız örnekteki fonksiyonu kullanırken " mesajVer("Yılmaz") " şeklinde yazarsanız hata alırsınız. Çünkü fonksiyonun 2 parametresi var ve sizden 2 parametre bekler. Fakat siz tarayıcıda zaten 1 tane yazılmasını istiyorsunuz ve çoğu durumda bu şekilde kullanacaksınız. Hal böyle olunca her defasında  " mesajVer("Yılmaz",1) " şeklinde yazmanız gerekir. Bu gibi durumları çözmek için parametrelere ilk değer ataması yapılır. Örneği şöyle değiştirelim.

<?php
function mesajVer($isim,$kacDefa=1){
    for($i=1;$i<=$kacDefa;$i++){
        echo "Merhaba $isim <br/>";
    }
}

mesajVer("Yılmaz",5); //5 defa alt alta "Merhaba Yılmaz" yazar

mesajVer("Ahmet"); //1 defa "Merhaba Ahmet" yazar
?>

Örnekten ne demek istediğimi anlamışsınızdır. Eğer 2. parametreyi belirtmezseniz bu yazım şekliyle 2. değerin "1" olacağını söylemiş oluyorsunuz. Biraz daha karıştıralım ve şöyle diyelim. Yazı rengini de parametre olarak gönderelim.

<?php
function mesajVer($isim,$kacDefa=1,$renk){
    for($i=1;$i<=$kacDefa;$i++){
        echo "<span style='color:$renk;'>Merhaba $isim <br/></span>";
    }
}

mesajVer("Yılmaz",5,"red"); //5 defa alt alta kırmızı "Merhaba Yılmaz" yazar

mesajVer("Ahmet","blue"); // Bu satır hata verir
?>

Örnekte gördüğünüz gibi en altta yazdığımız kod hata verir. Çünkü 2. parametrede sizden sayısan bir değer istiyor, oysa biz "blue" gönderdik. Ama siz 1 defa yazılsın istyorsunuz ve mecburen şöyle yazmanız gerekir, " mesajver("Ahmet",1,"blue"); ". Bu gibi durumlarda size tavsiyem, başlangıç değeri verilmiş parametreleriniz varsa onları en sona yazın böylece böyle bir durumla karşılaşmazsınız. Yani fonksiyon tanımlamasını "function mesajVer($isim,$renk,$kacDefa=1)" şeklinde yaparsanız bu durumda hata ortadan kalkacaktır.

Değer Döndüren Fonksiyonlar

Şimdiye kadar yazdığımız fonksiyonlar geriye değer döndürmüyor, doğrudan bulduğu sonuçları ekrana bastırıyordu. Fakat sizlerin de php'nin hazır fonksiyonlarından hatırlayacağınız üzere fonksiyon sonucunu bir değişkene atayıp işlem yapmışsınızdır. Örneğin;

<?php
$degisken=3;
if(isset($degisken)){
    echo "Değişken tanımlanmış."
}else{
    echo "Değişken tanımlanmamış!";
}
?>

Burada kullanılan "isset()" fonksiyonu php'nin hazır fonksiyonudur ve değişken varsa true yoksa false değer döndürür. Yani geriye değer döndüren fonksiyondur. Biz böyle bir fonksiyonu nasıl yazarız. Cevabı "return" özel deyimiyle.

<?php
function ciftMi($sayi){
    if($ciftMi%2){
        return false;
    }else{
        return true;
    }
}

if(ciftMi(5)){
    echo "Çift";
}else{
    echo "Tek";
}
?>

Örneğimizde verilen sayının çift olup olmadığını bulan fonksiyonu hazırladık. Çok ta gerekli değil biliyorum, maksat return'u anlatmak. Bir fonksiyon içerisinde 1 tane return olur. Örnekte 2 tane var ama şart ifadesine baktığınızda yalnızca birinin çalışacağını anlıyorsunuzdur. Ayrıca fonksiyon içerisinde return ifadesine gelindiği an fonksiyon sonlandırılır ve çıkılır. Örnekte boolean tipte değer döndüren bir fonksiyon görülmektedir. Sayısal değer döndüren bir örnek yapalım.

<?php
function islemYap($islem,$sayi1,$sayi2){
    switch($islem){
        case "+":
            $sonuc=$sayi1+$sayi2;
            break;
        case "-":
            $sonuc=$sayi1-$sayi2;
            break;
        case "*":
            $sonuc=$sayi1*$sayi2;
            break;
        case "/":
            $sonuc=$sayi1/$sayi2;
            break;
        default:
            $sonuc=0;
            break;
    }
    
    return $sonuc;
}

$toplam=islemYap("+",5,7); //12
echo $toplam;

echo "<br/>";

echo "Çarpım:".islemYap("*",3,5); //Çarpım:15 
?>

Global ve Static Tanımlamalar

Fonksiyon içinde ve dışında tanımlanan değişkenlerle alakalı bazı özel durumlardan bahsedelim. Fonksiyon dışında tanımlanmış bir değişkenle fonksiyon içinde tanımlanmış değişkenlerin isimleri aynı olsa bile farklı değişkenlerdir.

<?php
    function deneme(){
        $kelime="Php";
        echo $kelime;
    }
    
    $kelime="Html";
    deneme();
    echo $kelime; 
    
    //PhpHtml
?>

Fakat dışarıdan gelen değeri fonksiyon içerisinde kullanmak isterseniz "global" tanımlaması yapmalısınız.

<?php
    function deneme(){
        global $kelime;
        echo $kelime;
    }
    
    $kelime="Html";
    deneme();
    echo $kelime; 
    
    //HtmlHtml
?>

Yada fonksiyon içerisine tekrar gelindiğinde değeri değişmeyen bir değişken isteyebilirsiniz. Bu durumda static tanımlaması sizin işinizi görecektir. Örnekte bir sayac uygulaması var.

<?php
    function sayac(){
        $sayac=1;
        echo $sayac++;
    }
    
    sayac();
    echo "<br/>";
    sayac();
    
    /*
    1
    1
    */
?>

Static tanımlaması yapınca;

<?php
    function sayac(){
        static $sayac=1;
        echo $sayac++;
    }
    
    sayac();
    echo "<br/>";
    sayac();
    
    /*
    1
    2
    */
?>

 

^
X