Yazdır 07 Nisan 2010 Çarşamba (Hit: 41875)

Statik (static) Değişkenli Fonksiyonlar

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