Bir fonksiyonun çalışması bittiğinde içerisinde tanımlı olan değişkenler yok edilir yani ölürler. Fonksiyonun bir sonraki kullanımında tanımlı olan değişkenlerin eski değerleri kaybolmuş olur. Eğer fonksiyonun ikinci kez yada daha sonraki kullanımlarında içerisindeki değişkenlerin eski değerlerinin kaybolmasını istemiyorsanız o değişkenleri statik (static) olarak tanımlamanız gerekmektedir. Bu sayede değişkenlerin eski değerlerine ulaşabilirsiniz. Aşağıdaki örneği inceleyiniz.
<?php function say(){ $sayac=0; $sayac++; return $sayac; } echo "Sayaç=",say(); // ekrana Sayaç=1 yazar echo "<br>"; echo "Sayaç=",say(); // ekrana yine Sayaç=1 yazar echo "<br>"; echo "Sayaç=",say(); // ekrana yine Sayaç=1 yazar ?>
Aynı örneği statik değişken kullanarak yapalım.
<?php function say(){ static $sayac=0; $sayac++; return $sayac; } echo "Sayaç=",say(); // ekrana Sayaç=1 yazar echo "<br>"; echo "Sayaç=",say(); // ekrana Sayaç=2 yazar echo "<br>"; echo "Sayaç=",say(); // ekrana Sayaç=3 yazar echo "<br>"; ?>
Görüldüğü gibi fonksiyon çağırıldığında $sayac değişkeninin eski değeri kaybolmayarak tekrar tekrar kullanılıyor.
Örnek: Çağırıldığında diziye, dizide olmayan 1 ile 100 arasındaki bir sayıyı ekleyen fonksiyonu tanımlayalım.
<?php function yaz($dizi){ foreach($dizi as $deger) echo $deger," "; } function ekle(){ static $sayilar=array(); $varmi=true; // döngüye girmek için kullandık while($varmi==true){ $varmi=false; $sayi=rand(1,100); foreach($sayilar as $deger) if ($sayi==$deger) $varmi=true; } $sayilar[]=$sayi; return $sayilar; } // ekle() fonksiyonu ile diziye bir sayı ekleniyor ve dönen dizi yaz() fonksiyonuna veriliyor // her defasında diziye dizide olmayan bir sayı eklendiğine dikkat ediniz // dizi static olduğundan eski değerleri korunuyor yaz(ekle()); echo "<hr>"; yaz(ekle()); echo "<hr>"; yaz(ekle()); echo "<hr>"; yaz(ekle()); echo "<hr>"; yaz(ekle()); echo "<hr>"; yaz(ekle()); echo "<hr>"; ?>
Örnek: Aldığı metni $mesaj değişkeninin eski değerine ekleyen fonksiyonu tanımlayalım.
<?php function hata($metin){ static $mesaj="<b><u>Oluşan Hatalar:</u></b><br>"; $mesaj.=$metin."<br>"; return $mesaj; } $tam_metin=hata("Veritabanı bağlantısı yapılamadı!"); $tam_metin=hata("Tabloda ilgili kayıtlara ulaşılamadı!"); $tam_metin=hata("Listeleme yapılamadı!"); // tüm metinler $mesaj değişkenine eklendi echo $tam_metin; ?>
Örnek: Aldığı dizinin değerlerini $diziler adındaki diziye ekleyen fonksiyonu tanımlayalım.
<?php function yaz($dizi){ foreach($dizi as $deger) echo $deger," "; } function ekle($dizi){ static $diziler=array(); foreach($dizi as $deger) $diziler[]=$deger; return $diziler; } $dizi1=array(5,4,9); $dizi2=array(1,3,11,14); $dizi3=array(0,6,7,2,17); $tumu=ekle($dizi1); yaz($tumu); echo "<hr>"; $tumu=ekle($dizi2); yaz($tumu); echo "<hr>"; $tumu=ekle($dizi3); yaz($tumu); echo "<hr>"; ?>
Örneklerimizin amacı kullanımı sizlere öğretmektir. İhtiyaç duyduğunuz yerlerde bunlar aklımızda olursa çözüme daha kolay ulaşabiliriz.
Bu site meslek liselerinde bilişim bölümü web programcılığı dalında okutulan internet programcılığı dersine yardımcı olması için tasarlanmıştır. İletişim için iletisim@phpdefteri.com
Apache
PHP
MySQL
PhpMyAdmin
EasyPHP
Xampp
AppServ
Wamp
W3School
www.phpdefteri.com © 2010