PHP'de fonksiyonlar

Dikkat: Bu yazının yazılma tarihinin üzerinden en az 60 gün geçmiş. İçerisindeki bilgiler güncelliğini yitirmiş olabilir. Yorumları ve güncellemeleri göz önünde bulundurarak yazıyı takip ediniz.
Fonksiyonlar, matematikteki gibi bazı işlem gruplarını sık sık kullandığımız alanlarda bize oldukça kolaylık sağlar. PHP'de de aynı şekilde, belli işleri yapan ve sonuçta bazı durumlara göre uygulamanın ilerleyişini değiştiren çoğu işlemde kolaylık sağlar. Bu fonksiyonları komplike uygulamaların sık tekrarlanan parçaları olarak görebiliriz.
Fonksiyon yapılarını, aslında PHP içinde farkında olmadan, sık sık kullanıyoruz. (Biz her ne kadar farkında olmasak da onlar hep fonksiyondu ve fonksiyon olarak kalacaklar :-)

Örneğin, print() ya da echo(), php içerisinde en sık kullandığımız fonksiyonlardandır. "print();" yazarak bu fonksiyonu çağırmış oluyoruz ve bize bir sonuç veriyor. Fonksiyonlar parametre alarak çalışırlar.
print("Selam Gençler");
Buradaki "Selam Gençler" metini, print(); fonksiyonunun almış olduğu parametredir. Tabi fonksiyonların aldığı parametreler sadece string türünde olmayabilir. Bu parametre değer, değişken, dizi, sabit veya başka bir fonksiyonun sonuç kümesi olabilir.
$metin = "Selam Gençler";
print($metin);
Bu örneğimizde, bir önceki örnekteki ile aynı sonucu verecektir, yani ekrana "Selam Gençler" yazdıracaktır.

PHP nin kendi içerisinde hazır olarak bulunan bu fonksiyon örneklerini çoğaltmak mümkündür (substr(), strlen(), mysql_fetch_array()...) Örnek olarak verdiğimiz bu fonksiyonlar parametre alarak çalışırlar. PHP nin parametre almadan çalışan fonksiyonları da vardır.
exit();
PHP yorumlayıcısı bu satırı (fonksiyonu) gördüğünde sayfanın fonksiyondan sonrasını dikkate almayacaktır.Yani çalışma işlemi bu noktada duracaktır.
Göründüğüz üzere exit(); fonksiyonu hiçbir parametre almadan çalışmaktadır. (phpinfo(), break()...)

PHP nin kullanılmak üzere bizlere sunduğu bu fonksiyonlara yerleşik fonksiyonlar adını verebiliriz.
Burada asıl amacımız, kendi fonksiyonlarımızı yazmak. Bu yüzden ilk olarak PHP nin yerleşik olan, kendi fonksiyonlarını yüzeysel olarak inceledik.
Temel olarak bir fonksiyon yazarken kullanacağımız komut dizisi şöyledir;
function fonksiyonum(parametre_1, parametre_2 ...) {
  // yapılacak işlemler
}
Vermiş olduğumuz bu fonksiyon örneği, parametreler kullanarak işlem yapmaktadır. Yerleşik fonksiyonlarda olduğu gibi, kendi yazdığımız fonksiyonlar da parametre almadan işlem yapabilirler.
function fonksiyonumx() {
  // yapılacak işlemler;
}
Fonksiyonumuzu yazdıktan sonra artık kullanıma hazır hale gelmiş olur. Sıra yazmış olduğumuz fonksiyonu çağırmaya geldi.
fonksiyonumx();
Bu örneğimizde yazmış olduğumuz fonksiyonu parametre girmeden kullanıyoruz. Parametre alan fonksiyonumuzu ise şu şekilde çağırmalıyız;
fonksiyonum("deger_1","deger_2" ...);
Fonksiyon yazım kurallarını gördükten sonra, konunun daha iyi anlaşılması için artık çalışır bir fonksiyon yazabiliriz. Örneğin PHP nin yerleşik fonksiyonlarından biri olan print() fonksiyonunu Türkçeleştirelim. (ama sakın bu örneği uyguladıktan sonra yerleşik fonksiyonları tümünü Türkçeleştirmeye kalkmayın) :-)
function yazdir( $girilen_metin ) {
  print($girilen_metin);
  // $girilen_metin degiskenini ekrana yaz.
}

// fonksiyonu cagirmak icin;
yazdir("merhaba arkadaşlar");
Bu fonksiyonu yazıp, yukarıdaki haliyle çağırdıktan sonra ekranda fonksiyona girmiş olduğumuz metini, yani "merhaba arkadaşlar" yazısını göreceğiz. $girilen_metin, fonksiyonumuza ait parametremiz. Bu parametre, ekrana yazdırmak istediğimiz metini tutuyor. Parametre olarak yazdığımız metin $girilen_metin değişkenine depolanıyor, böylece fonksiyonumuz kendi içerisinde kullanılmak üzere bir veriye sahip oluyor. Daha sonra bu veri fonksiyon içerisinde gerekli yerlerde kullanılıyor.

Önemli NOT : Fonksiyonlar içerisinde olan bütün olaylar içeride kalır. İçeride atanan değişkenler, İçerideki sorgulamalar ve diğerleri. Aynı şekilde bir fonksiyon dışarıdan verileri TEK yolla alır. Onlar da parametrelerdir. Bunun dışında bir fonksiyon içerisinde sabitler ve ortam değişkenleri dışında hiçbir şekilde dış değişkenler direk kullanılamaz. Bunun için $GLOBALS dizisi kullanılır. Dışarıda atanan bir değişkene bu dizi içerisinde atanmış bir eleman gibi erişebiliriz.

Ufak bir uygulama yapalım

Öyle bir fonksiyon yazalım ki kullanıcıdan aldığımız metnin karakter sayısını bulsun ve ekrana hem bu metni, hem de bu metnin kaç karakterden oluştuğunu yazdırsın.
İlk olarak kullanıcıdan alacağımız bilgi giriş sayfasını yazalım;

-- uzunluk.htm --
<html>
  <body>
    <form action="uzunluk_hesapla.php" method="post">
      <input type="text" name="metin" size="15"><br>
      <input type="submit" value="Gönder">
    </form>
  </body>
</html>
-- uzunluk_hesapla.php --
function uzunluk($deger){
  $kac_karakter = strlen($deger);
  echo 'Girilen Metin : <font color="blue">'.$deger.'</font><br>';
  echo 'Metin Uzunlugu : <font color="red">'.$kac_karakter.'</font>';
}

// fonksiyonu çagiriyoruz.
uzunluk($metin);
Oldukça kolay değil mi? Uzunluk adında bir fonksiyon oluşturduk ve parametre olarak (girilen verileri depolaması için) $deger adında bir değişken belirledik. Daha sonra $deger değişkenimizin (bu değişkenin fonksiyonumuza ait parametremiz olduğunu söylemeye gerek yok sanırım) uzunluğunu bulabilmek için, PHP'nin yerleşik fonksiyonu olan strlen()'i kullandık. Bu değeri $kac_karakter değişkenine atadık. Böylece kullanıcıdan alacağımız değerin ($deger değişkeninin) uzunluğu artık, $kac_karakter değişkenimize depolanmış oldu.
Echo fonksiyonunu kullanarak bu verileri ekrana yazdırdık. İlk önce kullanıcıdan alarak $değer değişkeninde depoladığımız metini, ardında da metinimizin, $kac_karakter değişkeninde tuttuğumuz uzunluğunu.
Son olarak da "uzunluk($metin);" komutuyla fonksiyonumuzu çağırdık. buradaki $metin değişkeni (tahmin ettiğiniz gibi) uzunluk_gonder.htm dosyamızdan PHP sayfamıza POST metoduyla göndermiş olduğumuz string i tutuyor)

Parametrelere değer verilmezse?

Fonksiyonlar her sayfada kullanılacağı için fonksiyonlarımızı seçeneklere bağlı hale getirebiliriz. Eğer kullanıcı fonksiyona bir parametre göndermemişse fonksiyon sapıtabilir. Örneğin print() fonksiyonu kullanırken herhangi bir şekilde parametre kullanılmadan çağırılırsa fonksiyon boş değer döndürür (false değil NULL). Eğer fonksiyonunuz işlerinizde ölümcül bir işi yapıyorsa fonksiyonu kullanırken bunu denetleyebilirsiniz. Mesela;
function hesap( $deger = false ){
  return $deger;
}
Eğer bir parametre verilmezse fonksiyon programsal yanlış dönecektir. Kontrolle işlerimize devam ederiz.
Başka bir kullanımda; uygulamanın herhangi bir noktasında bir fonksiyon kullanılıyor ve işletilememesi uygulamanın hatalar getirmesine yol açıyorsa;
if( $sonuc = fonksiyon($deger) ){
  print("Hata oluştu. Uygulama durduruldu!");
  exit;
}
Şeklindeki kullanımla bu hataları önleyebilir veya uygulamanın başka yollarda devam etmesini sağlayabiliriz.
Gördüğünüz gibi parametrelere gelen değerleri geçerli olarak belirleyebiliyoruz. Bunun farklı bir kullanım alanı da şöyledir; fonksiyona gönderilen birden çok parametre sürekli farklı ayarlamalar yapıyor ve çok değişik kombinasyonlar çıkabiliyorsa, bu opsiyonların belirlenmemesi durumunda (yani parametrelerin boş olması durumunda) fonksiyonun kendimizce belirlediğimiz standart opsiyonlarda gitmesini sağlamak için fonksiyonu tanımlarken geçerli değerleri belirleyerek bu isteğimizi gerçekleştirmiş oluruz.

Hazırlayan : Sezgin Bilketay

Yorumlar

Üye Resmi serkan gül
12 Ocak Cumartesi ´08 22:35
teşekürler
Üye Resmi Mehmet
31 Ocak Perşembe ´08 01:06
eyw sagolasın Çok güzel anlatmışsın
Üye Resmi Nettasarım
25 Mart Salı ´08 15:41
Gerçekten sitede çok elzem bilgiler çok güzel bir şekilde indexlen miş akıcı ve görsel bir şekilde anlatılmış...

Teşekkürü bir borç bilirim.. Bararılar
8 Mayıs Perşembe ´08 15:43
bilgi için thanks   :-)
Üye Resmi Muhammed Han Çetin
16 Eylül Salı ´08 10:45
Bununla ilgili bir sorum olacak.Örneğin ben bi url oluşturmak istiyorum htaccess için. (.Ekran-Kartlari/Nvidia/nvidia-7500-gs.html) gibi.Bu url'yi oluştururken haliyle tr ve özel karakterleri süzgeçten geçirip ayrıca yazdırmam gerekiyor.Ben bu ve benzeri fonksiyonları işime yarayacak şekilde fonksiyonlar.php sayfasında toplasam ve lazım olan sayfaya include etsem bu yöntem hız kaybına neden olur mu ? Ya da lazım olan her fonksiyonu ayrı ayrı sayfalarda dahili olarak mı tanımlamalıyım?Hız açısından
18 Eylül Perşembe ´08 18:12
Hız açısından hiç kafanızı yormayın. include işi yapmak, her sayfada kullanmadığınız fonksiyonları bile tanımlamak hız kaybettirmez. Tabi birkaç milyon satırlık kodunuz yoksa   ;-)
Üye Resmi nasrullah
23 Ekim Perşembe ´08 18:14
teşekkürler ancak liste şeklinde eriler çekip bir array a aktarıp o diziyi result olarak döndürmek mümkün mü
Üye Resmi kazım
18 Aralık Perşembe ´08 11:49
Teşekkürler emeğiniz için...
Üye Resmi Volkan
24 Mayıs Pazar ´09 02:31
Emeğe saygı Elinize Sağlık Güzel bi şekilde anlatılmış Başarılar....:)
Üye Resmi derin deniz
17 Aralık Perşembe ´09 21:05
Girdiğiniz ismin yanına “hoş geldiniz”
yazan fonksiyonu oluşturunuz ve
program içinde kullanınız
Üye Resmi bd prlmş
4 Mart Perşembe ´10 10:48
ya mail gönderme yok mu ben mi göremedim yıllık ödevim ama bulamıyorum:(
Üye Resmi mstf bg
4 Mayıs Salı ´10 10:10
bilgiler pörfekt olmuş:D:D
Üye Resmi büşra
22 Aralık Çarşamba ´10 11:50
strlen komutunu kullanmadn nasıl yaprdık?
Üye Resmi Uğur
24 Mart Perşembe ´11 18:14
Teşekkürler. anlaşılır biçimde hazırladığınız bu makale için
Yeni Yorum *
İletişim Bilgileri
*
*
E-Posta adresiniz gösterilmeyecektir.
(unut)
Güvenlik Kodu *

Gönderiliyor