Mehmet Fatih YILDIZ (mfyz.com)

Menü



PHP'de fonksiyonlar

Kategori : PHP ve Pear Dökümanları
Eklenme Tarihi :
8 Aralık Çarşamba ´04
fonksiyonlar, function




Dikkat : Dökümanın yazılma tarihi üzerinden en az 60 gün (2 ay) geçmiş. İçerisindeki bilgiler güncelliğini yitirmiş olabilir, uygulamada ufak sorunlar oluşabilir. Yorumları ve güncellemeleri göz önünde bulundurarak dökümanı 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.

  1. 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.

  1. $metin = "Selam Gençler";
  2. 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.

  1. 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;

  1. function fonksiyonum(parametre_1, parametre_2 ...) {
  2.   // yapılacak işlemler
  3. }

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.

  1. function fonksiyonumx() {
  2.   // yapılacak işlemler;
  3. }

Fonksiyonumuzu yazdıktan sonra artık kullanıma hazır hale gelmiş olur. Sıra yazmış olduğumuz fonksiyonu çağırmaya geldi.

  1. fonksiyonumx();

Bu örneğimizde yazmış olduğumuz fonksiyonu parametre girmeden kullanıyoruz. Parametre alan fonksiyonumuzu ise şu şekilde çağırmalıyız;

  1. 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) :-)

  1. function yazdir( $girilen_metin ) {
  2.   print($girilen_metin);
  3.   // $girilen_metin degiskenini ekrana yaz.
  4. }
  5.  
  6. // fonksiyonu cagirmak icin;
  7. 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 --
  1.     <form action="uzunluk_hesapla.php" method="post">
  2.       <input type="text" name="metin" size="15"><br>
  3.       <input type="submit" value="Gönder">
  4.     </form>
  5.   </body>
  6. </html>


-- uzunluk_hesapla.php --
  1. function uzunluk($deger){
  2.   $kac_karakter = strlen($deger);
  3.   echo 'Girilen Metin : <font color="blue">'.$deger.'</font><br>';
  4.   echo 'Metin Uzunlugu : <font color="red">'.$kac_karakter.'</font>';
  5. }
  6.  
  7. // fonksiyonu çagiriyoruz.
  8. 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;

  1. function hesap( $deger = false ){
  2.   return $deger;
  3. }

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;

  1. if( $sonuc = fonksiyon($deger) ){
  2.   print("Hata oluştu. Uygulama durduruldu!");
  3.   exit;
  4. }

Ş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 (12 yorum/ping var)



Üye Resmi Ziyaretçi : serkan gül
12 Ocak Cumartesi ´08 22:35 tarihinde yazmış
teşekürler
 


Üye Resmi Ziyaretçi : Mehmet
31 Ocak Perşembe ´08 01:06 tarihinde yazmış
eyw sagolasın Çok güzel anlatmışsın
 


Üye Resmi Ziyaretçi : Nettasarım
25 Mart Salı ´08 15:41 tarihinde yazmış
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
 


Üye Resmi Üye : ahmed21
8 Mayıs Perşembe ´08 15:43 tarihinde yazmış
bilgi için thanks   :-)
 


Üye Resmi Ziyaretçi : Muhammed Han Çetin
16 Eylül Salı ´08 10:45 tarihinde yazmış
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
 


Üye Resmi Üye : mfyz
18 Eylül Perşembe ´08 18:12 tarihinde yazmış
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 Ziyaretçi : nasrullah
23 Ekim Perşembe ´08 18:14 tarihinde yazmış
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 Ziyaretçi : kazım
18 Aralık Perşembe ´08 11:49 tarihinde yazmış
Teşekkürler emeğiniz için...
 


Üye Resmi Ziyaretçi : Volkan
24 Mayıs Pazar ´09 02:31 tarihinde yazmış
Emeğe saygı Elinize Sağlık Güzel bi şekilde anlatılmış Başarılar....:)
 


Üye Resmi Ziyaretçi : derin deniz
17 Aralık Perşembe ´09 21:05 tarihinde yazmış
Girdiğiniz ismin yanına “hoş geldiniz”
yazan fonksiyonu oluşturunuz ve
program içinde kullanınız
 


Üye Resmi Ziyaretçi : bd prlmş
4 Mart Perşembe ´10 10:48 tarihinde yazmış
ya mail gönderme yok mu ben mi göremedim yıllık ödevim ama bulamıyorum:(
 


Üye Resmi Ziyaretçi : mstf bg
4 Mayıs Salı ´10 10:10 tarihinde yazmış
bilgiler pörfekt olmuş:D:D
 


Yeni Yorum

Önce Okuyun Yorumlarınızda sosyal, dini ve politik taraflı mesajlar, başkalarına saldırı sayılabilecek laflardan kaçının. Argo kelimeler, küfürler otomatik olarak silinecektir. Bu kural ihlalleri ip, üyelik, isiminizin banlanmasına yol açabilir.

Lütfen yardıma yönelik, konuyu uzatacak sorularınızı/yorumlarınızı forumda yazınız. Burası konu dahilindeki kısa soluklu öneri/yorumlar içindir. Aksi halde yorumunuzu göremeyebilir, uyarı alabilirsiniz.

Hatırlatmak amacıyla : html kodlarının, link yapmak, vb amacıyla gireceğiniz ekstra bilimum şeylerin çalışmayacağını belirteyim. Yorumlayıcı zaten linklerinizi otomatik çevirecek, gülücüklerinizi dönüştürecektir. Zengin metin özellikleri için araç çubuğundaki butonları kullanın.


İletişim Bilgileri


E-Posta adresiniz gösterilmeyecektir.

(unut)

Üye iseniz, giriş yapıp bu bilgileri girmeden hızlıca yorum yapabilirsiniz. Yorumunuzda resminiz/ikonunuz ve profil bağlantınız görüntülenecek, aynı zamanda güvenlik kodu girmek zorunda da kalmayacaksınız.
Üye olmak için buraya tıklayın.

Güvenlik Kodu
Güvenlik kodunu göremiyorsanız sayfayı yenileyin!


Yukarıdaki güvenlik kodunu bu kutuya yazın.

Yorum   
- +

Ad soyad, eposta ve yorum alanları
(⊗ işaretli alanlar) zorunludur.





mfyz.com'da şu an 10 ziyaretçi geziniyor. Toplam 114 makale, 208 yazı, 3000 gönderi var



  • RSS mfyz.com'u RSS beslemeleri ile takip edebilirsiniz
  • ServerTR Hosting Sponsoru ServerTR.com'a çok teşekkür ederiz
  • CC 2.5 Sitedeki materyalleri Creative Commons 2.5 Lisansı çerçevesinde kullanabilirsiniz. Lisans hakkında bilgi almak için tıklayın
  • İstatistikler Site ziyaret istatistikleri, konu, eğilim gibi ilginç istatistikler hakkında
  • Site Hakkında Site altyapısı, hazırlanışı, kurallar ve felsefesi hakkında
  • İletişim İletişim formu, iletişim bilgileri

mfyz.com Türk Programcılığının Gelişmesine Adanmıştır
HTML Standartlarına Uygundur

CSS Standartlarına Uygundur