View Single Post
Eski 09-05-04, 04:00
RestarT RestarT çevrimdışı
Varsayılan Cvp: PHP - Notlar && Dersler

PHP Dilinde Fonksiyonlar // Orta düzey

Fonksiyonlar PHP diline oldukça işlevsellik katan elemanlardır. Genel bir önbilgi vermek gerekirse fonksiyonlar kullanıcı tarafından tanımlananlar ve hal-i hazırda bulunanlar olmak üzere iki ana bölümde incelenebilir. Örneğin fopen(); ve include(); gibi fonksiyonlar hazırda olan ve önceden tanımlanmış fonksiyonlardır. Bu ve benzeri fonksiyonlar elbette işimize yaramaktadırlar ama bizim bazen de kendi fonksiyonlarımızı tanımlama ihtiyacımız doğabilir. İşte bu makalede bunu öğreneceğiz.

Fonksiyonların genel yazım şekli şöyledir;

Kod:
function fonksiyon_adi (değişken1,değişken2, ..., değişkenN) {
	// Yapılacak işlemler, komutlar vs.
}
Fonksiyonlara isim seçerken kullanacağımız kurallar aynen değişkenlere isim verme kurallarıyla aynıdır. PHP dilinde fonksiyonları tıpkı matematikteki f(x)=4+2x tarzı fonksiyonlar gibi düşünebiliriz. Yapılan işlem fonksiyona gönderilecek değişken değerine göre yön bulur. Fakat biz öncelikle sade bir fonksiyon örneğini inceleyelim.

Kod:
function ilkfonksiyonum() {
	echo("deneme 1 2 3");
}

# Çıktısını alalım.
echo ilkfonksiyonum();
Görüldüğü gibi ilk başta sadece echo komutunu icra eden bir fonksiyon tanımladık ve fonksiyonumuzu bitirdikten sonra çıktısını almak için yine echo komutunu kullandık. Eğer biz fonksiyonumuzu tanımladıktan sonra öylece bıraksaydık, yani çıktısını almak istemeseydik bile script icra edildiği taktirde bu fonksiyon işlenecek ve yorumlanacaktı. Yani PHP script içerisindeki bütün fonksiyonları kullanılsın veya kullanılmasın mutlaka yorumlar ve çalıştırır.

Şimdi biraz daha gelişmiş bir örneği inceleyelim.

Kod:
# x.(y+z) işlemini yapan bir fonksiyon tanımlayalım.
function islem ($x, $y, $z) {
	echo $x*($y+$z);
}

# Fonksiyonumuzu kullanalım. (28 çıktısı verecektir)
echo islem(4,2,5);
Yukarıdaki örnekte daha gelişmiş bir fonksiyon örneği görüyorsunuz. İşin içine argümanlarımızı, yani $x, $y ve $z değişkenlerimizi soktuk. Fonksiyonumuzu tanımlarken bu değişkenleri x(y+z) şeklinde işleme tabî tutmasını istedik ve bunu son olarak echo islem(4,2,5); şeklinde kullandık. Sanırım argüman içeren fonksiyonların kullanım şekillerini biraz da olsa kavradınız. Elbette bu örnekte gördüğünüz gibi fonksiyonları sadece matematik işlemleri için kullanmayacağız.

Ayrıca şunu da unutmamak gerekir ki, fonksiyonun argümanlarına fonksiyonumuzu tanımlarken default değerler atayabiliriz. Yukarıdaki örneği dikkate alarak şöyle bir fonksiyon yazımı yapılabilir;

Kod:
function islem ($x, $y, $z=3) {
	echo $x*($y+$z);
}
Görüldüğü gibi bu örnekte $z değişkenini 3 olarak atadık. Eğer ki bu fonksiyonu çağırmak istediğimiz zaman islem(4,2) gibi sadece iki değer girersek, üçüncü değer bizim atadığımız default değer olan 3 sayısı olacaktır. Fakat yine fonksiyonu çağırırken islem(4,2,5) gibi üç argümanı birden tanımlamak istersekte $z argümanı 5 olarak kullanılacaktır.

Fonksiyonlarımızı derlerken dikkat etmemiz gereken bir diğer nokta da, fonksiyonun dışında bulunan bir değişkeni fonksiyona dahil sayamayacağımızdır. Örneğin;

Kod:
$isim	= "birhan";
function yaz() {
	echo $isim;
}
echo yaz();
Yukarıdaki kod örneğinde görüldüğü gibi "$isim" değişkeni yaz(); fonksiyonunun dışarısındadır ve dolayısıyla bu kod örneğini çalıştırdığımız vakit ekrana hiçbir yazı gelmeyecektir. Çünkü fonksiyonumuz "$isim" değişkenini okumayacaktır. Eğer ki fonksiyonun dışındaki bir değişkeni fonksiyonumuza dahil etmek istersek imdadımıza global deyimi yetişecektir. Global deyimi sayesinde fonksiyonumuzun dışında kalan bir değişkeni içeriye alabiliriz. Yukarıdaki örneği tekrar derleyelim;

Kod:
$isim	= "birhan";
function yaz() {
	global $isim;
	echo $isim;
}
echo yaz();
Bu fonksiyonun çıktısı tahmin edebildiğiniz üzere "birhan" olacaktır. Çünkü global kullanarak "$isim" değişkenini fonksiyonumuza dahil ettik.

Bazı zamanlarda da (pek lazım olmasa bile) bir değişkeni fonksiyonumuzdan çıkarmak isteriz. Bunun için de static deyimini kullanmalıyız. Onun kullanım şekli de global deyimi ile aynı olduğu için değinmiyorum. Zaten pek işinize yarayacak bir şey olduğunu da söyleyemem.

Eğer daha önce fonksiyon yapılarını inceleme fırsatınız olduysa return deyimine mutlaka gözünüz takılmıştır. Evet, bu noktaya kadar bu deyimden hiç söz etmedim fakat return deyimi fonksiyonlardan bilgi almamız için gerekli olan yegane deyimdir. Bir script`imiz olsun, biz bu script`imizde HangisiBuyuk(); fonksiyonunu kullanalım ve bu fonksiyondan bir değer almak isteyelim. Aşağıdaki örneği inceleyin.

Kod:
function HangisiBuyuk($a, $b) {
	if ($a > $b)
		return $a;
	else
		return $b;
}
echo HangisiBuyuk(3,2);
Bu örnekte görüldüğü gibi bir if sınaması ile hangi değişkenin daha büyük olduğunu belirledik ve bunu return deyimi yardımıyla scriptimize gönderdik. Bu kodları çalıştırdığımız zaman 3 sayısı daha büyük olduğu için ekrana 3 sayısı basılacaktır.

Ayrıca unutulmamalı ki, return deyimi kullanıldığı zaman fonksiyon durur. Yani return deyimi icra edildiyse kendisinden sonra gelen işlemler göze alınmaz. Yukarıda yazdığımız örnekte bir if yapısı kullandığımız için, iki return deyiminden birisi if koşuluna bağlı olarak işletilecektir. Eğer ki fonksiyon bize $b değişkeni olarak dönecekse $a değişkenine ait return deyimi dikkate alınmayacaktır çünkü if sınaması sonucunda o değişken atlanmış olacaktır. Anlatmak istediğim nokta, return deyimi yazıldığı zaman değil çalıştırıldığı zaman fonksiyon durur.

Fonksiyonlar tanımlayarak kod tekrarı yapmaktan kendimizi kurtarabiliriz. Örneğin sayfamızın üst ve alt kısmını ekrana basacak iki fonksiyon tanımlarız. Bunlar ingilizcede yaygın olarak kullanılan ismiyle header(); ve footer(); fonksiyonları olsun. Bu iki fonksiyonu her sayfamızın üst ve alt kısımlarında çalıştırarak her sayfamızı benzer sayfalar haline getirebiliriz. Oysa bu fonksiyonları tanımlamamış olsaydık biliyorsunuz ki devamlı kod tekrarı yaparak her sayfanın alt ve üst kısımlarına aynı şeyleri yazmak durumunda olacaktık. Üstelik bir de bunları değiştirmek istediğimizi düşünün.. Sizce de onca sayfayı tek tek değiştirmek zor olmaz mıydı? Evet oldukça zor olurdu. İşte bu zorluklardan kurtulmak için fonksiyon kullanmalıyız.

Son bir örnek vererek konuyu sonlandıralım.

Kod:
$yazi = "gülüyorum :) üzülüyorum :( ama yine de {b}kopuyorum{/b} :D :D :D";

function sekillendir($x) {

	$x = str_replace(':)', '<img src=gulenyuz.gif>', $x);
	$x = str_replace(':(', '<img src=uzulmus.gif>', $x);
	$x = str_replace(':D', '<img src=kopmus.gif>', $x);
	$x = str_replace('{b}', '<b>', $x);
	$x = str_replace('{/b}', '</b>', $x);

	return $x;
}
echo sekillendir($yazi);
Hani Forumlarda falan gülen yüzler kendiliğinden çıkıverir. Eğer ki bunu kendi sayfamızda yaptırmak istersek bu tür bir fonksiyon kullanabiliriz. Sanırım bunca şeyi okuduktan sonra aklınızda bu fonksiyonun nasıl işlediği hakkında pek bir soru kalmamıştır. Dolayısıyla fazlaca ayrıntısına inerek açıklamak istemiyorum, siz zaten nasılsa yukarıdaki fonksiyonun işleyiş ve yazım tarzını anlamış olmalısınız.

Yukarıdaki fonksiyonun çıktısı HTML kaynak kodu olarak şöyle olacaktır;

Kod:
gülüyorum <img src=gulenyuz.gif> üzülüyorum <img src=uzulmus.gif> ama yine de <b>kopuyorum!</b> <img src=kopmus.gif> <img src=kopmus.gif> <img src=kopmus.gif>
Fonksiyonlar konusu bu kadar. Ama tanımlayabileceğiniz fonksiyonlar asla bu kadar değil. Akla hayale gelmeyen fonksiyonlar tanımlayabilirsiniz, mutlaka kendinizi fonksiyon kullanmaya alıştırın. Emin olun ki işleriniz eskisinden daha kolaylaşacaktır.

Hoşçakalın.

// gelecek konu: dosya işlemleri - 1

Mesajı son düzenleyen RestarT ( 14-05-04 - 23:27 )
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla