Ne Öğreneceğim?
- PHP Fonksiyonları
Gereksinimler
- PHP 5.4 ve üzeri
- Linux İşletim Sistemi
Zorluk
- Orta Düzey
Global Deyimi
Parametresiz fonksiyonları anlatırken bazı istisnalar olabileceğinden söz ettik ve ne olduğuna değinmedik. Söz konusu istisnai durum global değişkenlere erişimdir. Fonksiyon dışında tanımlanmış değişkenlere erişmek için global deyimi kullanılır. Fonksiyon içinde global olarak kullanılan bir değişken eğer değişikliğe uğrarsa, bu durumdan tüm program etkilenir.
<?php
function global_erisim ( ) {
global $degisken;
ecgo 'Global = ' . $degisken;
$degisken = 10;
}
$degisken = 3;
global_erisim ( );
echo 'Yerel = ' . $degisken;
?>
Yukarıdaki örnekte, fonksiyon kullanılmadan hemen önce tanımlanan (eğer sonra tanımlanırsa erişilemez) $degisken değerine fonksiyon içinde global deyimi kullanarak erişebildik. Ayrıca fonksiyon içinde değerini değiştirdiğimizde değer 3 olan değişkenimizi artık 10 değerine sahip olduğu örnekten anlaşılmaktadır.
Fonksiyonlar ile Dizileri Kullanmak
Fonksiyonlara parametre olarak dizi tipli değişkenleri göndermek ya da fonksiyondan dizi tipli sonuçlar almak mümkündür. Fakat şu yanılgıya kapılmayın, parametre olarak dizi gönderildiğinde illa ki dizi tipli sonuç almak zorunda değildir. İhtiyaca göre istersek integer tipli sonuç almak da bizim elimizde.
<?php
function dizi_islem ($dizi) {
$toplam = 0;
$carpim = 1;
foreach ($dizi as $deger) {
$toplam += $deger;
$carpim * =$deger;
}
return array ($toplam, $carpim);
}
$sonuc = dizi_islem(array(2, 3, 4));
echo 'Toplam = ' . $sonuc[0] ;
echo 'Carpim = ' . $sonuc[1];
?>
Yukarıdaki örnekte dizi tipli bir değişken aldık. Parametre olarak dizi tipli değişkeni nasıl gönderilmesi gerektiği, dizinin çağırıldığı satırdan anlaşılmaktadır. Fonksyion içerisinde foreach döngüsü ile tüm dizi elemanlarına erişilerek bu elemanların toplamları ve çarpımları ayrı değişkenler üzerinden gerçekleştiriliyor. Sonuçlar da return deyimi sırasında array tipine dönüştürülerek gönderiliyor. Örnekte, sonuç dizisinin 0. (sıfırıncı) elemanı değerlerin toplamı, 1. (birinci) elemanı ise değerlerin çarpımını tutuyor. Fonksiyonlardan sonuçları aldıktan sonra artık istediğimiz işlemi gerçekleştirebiliriz.
Fonksiyonlara Parametre Olarak Referans Gönderme
C ve Java gibi pointer (işaretçi) destekleyen dilleri kullananlar referans kelimesinin ne anlama geldiğini bileceklerdir. Bilmeyenler için şöyle izah edeyim.
Tanımlanan her değişken bilgisayarın RAM belleğine saklanır ve saklandğı yerin bir adresi var. Bir değişkenin refeansı ise değişkenin RAM bellekte saklandığı hücrenin adresidir. Eğer bu hücrenin içeriği değiştirilirse bu durumdan mecburi olarak değişken de etkilenir.
Normal şartlarda, fonksiyonlara değişkenlerin referansları değil değerleri gönderilir. Eğer bir fonksiyona değişkenin referansı gönderilir ve fonksiyon içinde bu değişkenin değeri değiştirilirse, fonksiyon dışındaki değişkeninde değeri değiştirilmiş olur. Bir fonksiyona değişkenin referansını göndermek için değişkenin başına ampersand (&) işareti yerleştirilir.
<?php
function referans ( & $sayi) {
$sayi = 3;
}
$sayi = 1;
referans ($sayi1);
echo $sayi;
?>
Yukarıdaki örnekte fonksiyon sadece bir tane parametre alıyor ve parametre (önündeki & işaretine dikkat edin) referans tipli. Dikkat edilirse fonksiyon henüz çağırılmadan önce $sayi değişkeninin değerini 1 vermiştik. Fonksiyonu çalıştırdık ve $sayi değişkeninin değerini 3 olarak değiştirdik. Değişkeni ekrana yazdırdığımızda ise 1 yerine 3 yazdı. Fonksiyonunun içerisinde değişkenini RAM bellekteki adresinin değeri değiştirildiği için değişkende bu durumdn haliyle etkilendi.
Eğer fonksiyon parametresinin önündeki & işaretini kaldırırsanız değişkenin değerinin değişmeyeceğini fark edebilirsiniz. Bu durumda değişkenin adresi değil değeri alınıyor. Değişken fonksiyon içinde yerel bir değişken durumuna dönüştüğünden, değişikliklerden fonksiyon dışında bulunan değişken bu durumda etkilenmeyecektir.
Yapay Parametreler (Argüman)
Eğer fonksiyon için gönderilecek parametre sayısında bir belirsizlik varsa ya dizi yöntemi ya da şimdi bahsedeceğimiz yöntemi tercih etmelisiniz. Bu yöntem için 3 adet PHP fonksiyonu öğreneceğiz.
<?php
function argumanlar ( ) {
$adet = func_num_args ( );
if ( $adet == 0)
return;
echo $adet . ' parametre bulundu.';
if ($adet > 1) {
$args = func_get_args ( );
foreach ($args as $key) {
echo $key;
}
#echo func_get_arg(1) komutu ile 2. sıradaki değer alınabilir.
} else {
echo func_get_arg (0);
}
echo;
}
argumanlar ( );
argumanlar ('HTML5');
argumanlar ('PHP', 'MySQL');
?>
Yukarıdaki örnekte, normalde fonksiyon herhangi bir parametre almamasına rağmen, parametre gönderdiğimizde bu parametrelere erişebiliyoruz. Örnekte öncelikle func_num_args ( ) ile kaç adet parametre algılandığını öğreniyoruz. Eğer hiç parametre yoksa fonksiyondan çıkıyoruz. Eğer birden fazla parametre varsa tüm parametrelere erişmek için func_get_args ( ) fonksiyonu ile tüm parametrelere tek sefer erişebiliyoruz. Eğer tek parametre gönderilmişse func_get_arg ( ) metodu ile bu parametreyi alıyoruz.
Katkılarından dolayı Sercan Çakır'a teşekkürler.
PHP Fonksiyonları serimizin burada noktalanmıştır. Okuduğunuz için teşekkürler, iyi çalışmalar.
Seri
Posted on Utopian.io - Rewarding Open Source Contributors