26 Şubat 2014 Çarşamba

PHP - Fonksiyonlar ve Değişkenlerin Kapsamı

* 15.11.09 tarihinde İstanbul'da bir bilgisayar dershanesinde verdiğim PHP ve Web Programlama eğitimi ders notlarıdır.

Değişkenlerin Kapsamı



Değişkenler, program içerisinde sıkça kullandığımız ve verileri sakladığımız kaplardır. Her değişken, kullanımı kolay ve hatırda kalan ismi ile, bellek alanında bir adres bölgesine işaret ederek önemli bir işi yapmaktadırlar. Bunu tıpkı domain adlarının, IP'leri işaret etmesi ve akılda zor tutulabilecek sayısal bir dizgeyi ezberlemek uğraşından bizi kurtarmasına benzetebiliriz.

Değişkenler, program içerisinde tanımlanır, değer alır ve bu değeri program içerisinde değişiklik gösterebilir.
Değişkenlerin, aldıkları değer kadar, bu değerlerin hafıza bölgesinde saklanma ömürleri ve bu ömür içerisinde başka işlemler tarafından algılanıp/algılanmaması söz konusudur.

İşte bu konunun kavramsal adı, değişken kapsamıdır.

Değişkenler, kapsam açısından iki kısma ayrılır,

-Yerel (Local)
-Genel (Global) değişkenler.

Global değişkenler, etki alanların en yüksek olan değişkenlerdir. Ve tanımlandıkları tüm kod bölgesi içerisinde okunabilir ve değiştirilebilirler.

Yerel değişkenler ise tanımlandıkları bölge içerisinde etkin olup, bu bölge içerisinde okunup, yazılabilirler.


Söz gelimi, bir fonksiyon, döngü ya da yapı içerisinde tanımlanan değişken, varsayılan olarak yerel(local) bir değişkendir. Etkisi ve ömrü tanımlandığı yapının kod blokları ile sınırlıdır. Yorumlayıcı/Derleyici bu kod bloğunun dışına çıktığında, bu değişken de miadını doldurmakta ve hafıza bölgesinden silinmektedir.

Bunu iç içe kümeler olarak düşünebilir.

Kümelerimizi birer kod yapıları olarak kabul edelim

A,B ve C isimli kümelerimizin her biri kod yapılarıdır.

A kümesi, B kümesini; B kümesi de C 'yi kapsamaktadır.

A kümesinde bulunan bir değişken hem B, hem de C için global değerdedir.

B kümesinde tanımlanan bir değişken A için yerel; C için ise global değerdedir.

C içinde tanımlanan değişken ise, A ve B kümeleri için yerel; C kümesinin içerdiği tüm elemanlar için ise global yani evrensel değerdedir.





FONKSIYONLAR

Fonksiyonlar, bir işi yapmak üzere tanımlanmış, özel kod bloklarıdır. Hafıza bölgesine bir kez yüklendikten sonra, çağrıldıkları her an, kendileri için tanımlanmış işlemi yapar ve kendilerini sonlandırırlar.

Function EkranaYaz()
{
echo “Bu bir fonksiyondur”;
}



Fonksiyonlar iki kısma ayrılır: Değer döndüren ve değer döndürmeyen fonksiyonlar.

Değer döndüren fonksiyonlar, icralarının sonunda, geriye, X tipinde(herhangi bir tip olabilir) bir sonuç bırakırlar; değer döndürmeyen değişkenler ise, çağrıldıkları an icra edilirler ve kendilerini sonlandırırlar.

İster değer döndürsün, ister değer döndürmesin fonksiyonlar, dışarıdan değer alıp, işlemleri bu değerler ile yapabilirler. Bunlara, dinamik ya da etkileşimli fonksiyonlar diyebiliriz.






Söz gelimi:
function Hesapla()
{
echo $a+$b;
}
Yukarıdaki fonksiyon, parametresiz çağrılan ve değer döndürmeyen bir fonksiyondur. $a ve $b değişkenlerinin toplamını ekrana yazmakla görevlidir. $a ve $b değişkenlerinin değeri, parametrik olarak dışarıdan alınmadığı için, fonksiyon içerisinde tanımlanmak zorundadır. Bu da fonksiyonun varoluş amacı ile terstir.

Ama yukarıdaki Hesapla() isimli fonksiyon aşağıdaki şekilde olabilir

function Hesapla($a,$b)
{
echo $a+$b;
}

Dinamik bir fonksiyon yazdık. A ve B değerlerini dışarıda almakta ve yalnızca yapacağı işlemi bilmektedir. A ve B değeri ne olursa olsun; Hesapla() fonksiyonu bu iki sayıyı toplayıp sonucu ekrana yazacaktır.







Parametreli Fonksiyonlara Değer Aktarmanın Çeşitleri

Fonksiyon çağrıldığında, işlem yapabilmesi için kendine değer ya da değerler geçirilebilir. Birincisi, değişkenin yalnızca değerini geçirerek fonksiyona parametre atayabiliriz. Peki ama bu ne demektir?


$sayi=1;

function arttir($sayi)
{
$sayi++;
echo $sayi;
}

arttir($sayi);
echo $sayi;


Ekran çıktısı:

2
1

şeklinde olacaktır. Fonksiyonumuza yalnızca $sayi isimli değişkenin değerini geçirdik. Kendisini değil. Echo $sayi komutundan da görülebileceği gibi, $sayı değişkeninin değerinde hiçbir değişiklik olmadı.


$sayi=2;

function arttir()
{
$sayi++;
echo $sayi;
}
arttir();
Kodumuzu yukarıdaki şekilde yeniden yazıp sonucu kontrol ettiğimizde, ekranda istediğimiz sonucun görüntülenmediğini görebiliriz. Oysa ki $sayi isimli değişken arttir() fonksiyonu için, global yani evrensel değerdedir. Fakat fonksiyonlar, kendilerine referans ya da değer seçeneklerinden biri ile aktarılmayan değişkenleri tanımamaktadır. Öyle ise, fonksiyonumuz içerisinde, $sayi değişkeninin ne olduğunu /hangi öneme sahip olduğunu belirtmeğe ihtiyacımız var.

$sayi=2;

function arttir($sayi)
{
global $sayi
$sayi++;
echo $sayi;
}


Böylelikle, $sayi isimli değişkenin, fonksiyonun çağrıldığı yer açısından global yani evrensel değerdeki $sayi isimli değişkene ait olduğunu belirtiyoruz. 

Hiç yorum yok:

Yorum Gönder