PHP’de Değişkenler

Değişkenler temel programcılık kavramlarından bir tanesidir. Her programlama dilinde değişkenler ile mutlaka karşılaşırsınız. Bu kavramı anlamak, programcılığa başlamanın neredeyse ön koşulu gibidir.

Değişkenler, program içinde verilerle çalışmayı sağlayan sembolik ifadelerdir.

PHP’de Değişken Tanımlama

PHP’de değişken isimleri $ işaretiyle başlar. Bu işaretten hemen sonra değişkenin ismi yazılır. Değişken isimleri, kullanım amacına yönelik olarak verilmelidir. Örneğin amaç renk ile ilgili bilgileri tutmak ise değişken ismi renk veya color olarak belirlenebilir. Böylece değişkenin tuttuğu verinin ne olduğu anlaşılmış olur.

Değişken tanımlamaya örnek olarak aşağıdakileri verebiliriz.

<?php
   $metin ="Merhaba Dünya!";
   $sayi = 5;
   $noktaliSayi = 10.5;
?> 

Yukarıda verilen kod icra edildikten sonra, $metin değişkeni Merhaba Dünya!, $sayi değişkeni 5, $noktaliSayi değişkeni 10.5 değerlerini tutacaktır. $metin değişkenine atanan değer metin olduğundan Merhaba Dünya! değeri çift tırnak içinde yazılmıştır. 

Yukarıda verilen örnek uygulamada görüleceği üzere PHP’de değişkenlerin veri tiplerini belirlemedik. PHP, verdiğiniz değere bağlı kalarak değişkeni otomatik olarak doğru veri tipine dönüştürür. C, C++ ve Java gibi diğer programlama dillerinde ise programcı değişkenin tipini önceden belirtmek zorundadır. PHP, bu yönüyle dinamik programlama dillerinden birisidir. Dinamik dillerde önceden değişken tipini tanımlamak zorunda değiliz. C, C++, Java, Scala ve Kotlin gibi diller ise statik dillerdir. Bu dillerde değişken tipleri önceden belirtilir ve kod derleme sırasında tür denetimi yapılır.

Değişken Tanımlama Kuralları

PHP’de değişkenlere isim verirken aşağıdakilere uymamız gerekiyor:

  • Değişken isminden hemen önce $ karakteri kullanılmalıdır.
  • Değişken ismi sadece harf veya alt çizgi ile başlamalıdır.
  • Değişken ismi kesinlikle rakamla başlamaz.
  • Değişken isimleri alfanümerik ve altçizgi içerebilir (A-z, 0-9, ve _ )
  • Değişken isimleri küçük/büyük harfe duyarlıdır. (yas ve YAS değişkenleri farklıdır.)

Değişkenleri Yazdırmak

PHP’de kullanılan echo komutu ile verilerin ekrana yazdırılması sağlanır. Değişkenleri ekrana yazdırmak istediğimizde yine echo komutunu kullanırız. Aşağıda bu işlemi nasıl yapacağımızı gösteren bir kod verilmiştir.

<!DOCTYPE html>
<html>
<body>
<?php
 $mesaj = "PHP Eğitimi";
 echo "Merhaba $mesaj!";
?>

</body>
</html>
 

 

Echo komutunda çift tırnak içinde bulunan “Merhaba” kelimesi olduğu gibi yazılırken, $mesaj yerine ise “PHP Eğitimi” ifadesinin yazıldığını görmekteyiz. Değişkenler sembolik ifadeler olup temel amaçları verilerle çalışmayı sağlamaktır. Derleyici $ ile başlayan mesaj ifadesinin değişken olduğunu anlar ve değişken değerini ekrana yazar.

Değişkenleri farklı yollarla ekrana yazdırabiliriz. Örneğin yukarıdaki kodu aşağıdaki gibi düzenlediğimizde ekran çıktısı aynı olacaktır.

<!DOCTYPE html>
<html>
<body>
<?php
  $mesaj = "PHP Eğitimi"
  echo "Merhaba ".$mesaj."!";
?>
</body>
</html>

Değişkenin tipi string yani metin olduğu zaman sonuç ekrana olduğu gibi yazılır. Birde sayılar ile nasıl çalışacağımızı görelim.

<!DOCTYPE html>
<html>
<body>
<?php
  $sayi1 = 25;
  $sayi2 = 45;
  echo $sayi1 + $sayi2;
?>
</body>
</html>

Bu örnek uygulamada ekran çıktısı aşağıdaki gibi olur.

Echo komutu her iki sayıyı toplar ve sonucu ekrana yazar. İsterseniz hangi sayıların toplandığını kullanıcılara gösterebilirsiniz.


<!DOCTYPE html>
<html>
<body>

<?php
  $sayi1 = 25;
  $sayi2 = 45;
  echo "$sayi1 + $sayi2 =".($sayi1 + $sayi2);
?>

</body>
</html>

Burada hangi sayıların toplandığı görülmektedir.

Değişken Etki Alanı

PHP’de değişkenleri herhangi bir yerde oluşturabiliriz. Ancak değişkenlere erişimin olup olmadığı alanlar vardır. Bunlara scope yani etki alanı denir. Şimdi bunlardan bahsedelim.

PHP’de üç farklı değişken etki alanı bulunmaktadır.

  • global
  • local
  • static

Global ve Local Scope (Global ve Yerel Etki Alanı)

Global ve Local etki alanları beraber ele alınması gereken iki kavramdır. Öncelikle Global etki alanını ele alalım. Bir değişkenin etkisinin global olması için herhangi bir fonksiyon veya metot içinde tanımlanmaması gerekiyor.


<!DOCTYPE html>
<html>
<body>

<?php
    $sayi = 9;

    function deneme(){
      echo $sayi;
    }

   deneme();

?>
</body>
</html>

Yukarıda $sayi değişkeni global etki alanına sahip olarak tanımlanmıştır. Deneme() isimli metot içinde bu değişkeni echo ile yazdırmaya çalıştığımız zaman ekran çıktısı aşağıdaki hatayı verir.

Burada sayi değişkeninin undefined yani tanımlı olmadığı hatası verilmiştir. Bunun temel nedeni sayi değişkeninin global olmasıdır. C veya Java gibi dillerde böyle bir hata verilmez. Çünkü global olarak tanımlanan bir değişkene heryerden erişim sağlanabilir. PHP’de böyle bir durum söz konusu değil. Bunun temel sebebi global değişkenlerden kaynaklanan hataların önüne geçmeyi sağlamaktır.

Global değişkenlerin yerelde kullanılması için global anahtar ifadesini kullanmak gerekiyor.


<!DOCTYPE html>
<html>
<body>

<?php
  $sayi = 9;

  function deneme(){
    global $sayi;
    echo $sayi;
  }

deneme();

?>

</body>

Görüleceği üzere herhangi bir hata vermedi.

İlk PHP kodunu aşağıdaki gibi düzenleyelim. Burada local kavramını anlamaya çalışalım.


<!DOCTYPE html>
<html>
<body>

<?php

  function deneme(){
     $sayi = 9;
  }

deneme();
echo $sayi;
?>

</body>
</html>

Local etki alanı metot veya fonksiyon içinde tanımlanan değişkenlerin etki alanını tanımlamayı sağlar. Yukarıda verdiğimiz uygulamanın ekran çıktısı şöyle olur.

Burada sayi değişkeninin tanımlı olmadığı mesajı verilmektedir. Çünkü değişkenimiz deneme() isimli metot içinde tanımlı olduğundan dolayı local olarak tanımlıdır. Bu değişkene sadece tanımlandığı deneme isimli metot içinden erişim sağlanır. Global’de erişim hata verecektir. Local kapsama alanına sahip olan değişkenlere globalde erişim sağlamak için yine global anahtar ifadesini kullanmalıyız.

<!DOCTYPE html>
<html>
<body>
<?php
function deneme(){

      global $sayi; 
      $sayi =9;

}
deneme();
echo $sayi;

?>

</body>
</html>

Bu değişiklik ile birlikte ekran çıktısı aşağıdaki gibi olur.

Son olarak $GLOBALS[index] dizinden bahsetmek istiyorum. PHP’de global olarak yani herhangi bir metot içinde tanımlanmayan değişkenler $GLOBALS[index] isimli bir dizi içinde tutulur. Bu dizide kullanılan index değeri değişken adını ifade eder. Örnek uygulama şöyledir.


<!DOCTYPE html>
<html>
<body>

<?php

$sayi = 12;
echo "İlk Değer: ".$sayi."<br>";
function deneme(){
   $GLOBALS['sayi']=33;
}
deneme();
echo "Son Değer: ".$sayi;

?>

</body>
</html>

Öncelikle sayi değişkenine 12 değeri atanır ve bu değer ilk değer olarak ekrana yazılır. Daha sonra deneme() isimli metot çağrılır. Burada $GLOBALS[index] dizinde tutulan sayi değişkenine erişim sağlanır ve 33 değeri atanır. Echo komutu ile sayi değişkenine atanan 33 değeri son değer olarak ekrana yazılır. Ekran çıktısı aşağıdaki gibidir.

Static Etki Alanı

Static etki alanı doğrudan metotlarla ilgili olan bir kavramdır. Metotlar çağrıldıktan ve içinde bulunan kodlar icra edildikten hemen sonra sahip olduğu tüm değişkenler silinir. Ancak, bazı durumlarda silinmesini istemediğimiz yerel değişkenlere ihtiyacımız olabilir. Bu gibi durumlarda static anahtar ifadesini kullanırız. Tabi bu anahtar ifadenin etkisini daha iyi kavramak için öncelikle aşağıdaki kodu inceleyelim.


<!DOCTYPE html>
<html>
<body>

<?php
function deneme()
{
   $sayac = 0;
   echo $sayac."<br>";
   $sayac++;
}
deneme();
deneme();
?>

</body>
</html>

Bu uygulamada deneme() isimli metodu iki kez çağırdık. Static anahtar ifadesi olmadan böyle bir kullanımda ekran çıktısı aşağıdaki gibi olur.

Ekranda iki adet 0 görmekteyiz. Deneme isimli metot ilk çağrıldığı zaman sayac isimli bir değişken oluşturulur ve buraya 0 değeri ilk değer olarak atanır. Daha sonra değişken ekrana yazılır. Ekrana yazma işleminden sonra sayac değişkeni ++ operatörü ile bir arttırılır. Metot bu işlemle birlikte tamamen icra edilir. İcra işleminden sonra deneme metodunda bulunan tüm değişkenler silinir. Metodu ikinci kez çağırdığımızda ise işlemler anlattığımız şekilde gerçekleşir ve ekrana her zaman için 0 yazılır. Static anahtar ifadesi ile bunun önüne geçebiliriz.


<!DOCTYPE html>
<html>
<body>
<?php

function deneme()
{
   static $sayac = 0;
   echo $sayac."<br>";
   $sayac++;
}

deneme();
deneme();
?>
</body>
</html>

Sayac değişkeninin başına static ifadesini eklediğimiz için ekran çıktısı aşağıdaki gibi olur.

Görüleceği üzere metot ikinci kez çağrıldığı zaman sayac değişkenine sıfır değeri atanmamış ve ilk çağırmadan kalan 1 değeri olduğu gibi korunmuştur. Son sahip olduğu değeri korumak için local değişkenlerin static olarak tanımlanması gerekiyor.

Static anahtar ifadesi özellikle kendi kendini çağıran (recursive) metotlarda faydalı olmaktadır. Recursive metotlar kendini çağırabilen metotlardır. Böyle bir metot dikkatli bir şekilde yazılmadığı zaman sonsuza kadar çalışabilir. Çağırma işlemini bir noktada bitirmek için uygun bir yöntem seçmek gerekiyor. Aşağıda verilen örnek uygulamada çağırma işlemi i yerel değişkeni 6 olana kadar devam etmektedir. Bu gibi durumlarda static ifadesi i yerel değişkeninin başına eklenmez ise i değeri her çağırmada 0 olacağı için hiçbir zaman çağırma işlemi sonlanmayacaktır.


<!DOCTYPE html>
<html>
<body>

<?php
function sayac()
{
   static $i = 0;
   $i++;
   echo "$i ";
   if ($i < 5) {
     sayac();
   }
   $i--;
}
sayac();
?>

</body>
</html>

Uygulamada bulunan static ifadesini sildiğimizde ise ekran çıktısı aşağıdaki gibi olur.

Böyle bir değişiklikle beraber ekrana her zaman 1 değeri yazılır ve bir süre sonra hata verir.