PHP değişken etki alanı (GLOBAL / STATİK)

Bu yazımızda PHP dilinde değişkenlerin etki alanlarına değineceğiz .

PHP değişken etki alanı (GLOBAL / STATİK)
Değişken etki alanları PHP

PHP dilinde değişken etki alanlarını ayrıntılı olarak inceleyeceğiz bu yazımızda
İlk olarak PHP dilinde Global değişken tanımlama alanına örnek verelim

<?php
$degisken = 20; /* küresel etki alanı */

function yazdir()
{
    echo $degisken; /* yazdir fonksiyonun etki alanı */
}

yazdir();
?>

Bu kod bloğu çalıştığında sonuç boş dönecektir çünkü küresel (global) alanda tanımlanan değişkene fonksiyon gibi özel alanlarda direkt erişim sağlayamıyoruz, bazı dillerde bu erişime izin verilmiştir ancak PHP dili global değişkenlerin gözden kaçıp , unutulup silinmesi gibi durumları göz önünde bulundurarak bu durumu değiştirmiştir. 

Ama fonksiyon içerisinde de erişmek istiyorsak Global  belirtecini kullanırız.

Global tanımlaması 

<?php 
$sayi_bir = 43;
$sayi_iki = 412;

	function hesapla (){
		global $sayi_bir , $sayi_iki;
		echo "Sayı bir = $sayi_bir ve Sayı iki = $sayi_iki ";

	}
hesapla();
//Çıktı= Sayı bir = 43  ve Sayı iki = 412
?>

Gördüğümüz gibi global tanımlaması sayesinde fonksiyon içerisinde de erişebildik , ama istersen global tanımlaması yapmadan PHP arka planında tanımlı olan $GLOBALS  dizisini kullanarak da değişkenleri çağırabilirsin. Bu dizi içerisinde parametre olarak global alanda tanımlanan değişken ismini alıyor . Örnek vermek gerekirse :
 

<?php 
$sayi_bir = 43;
$sayi_iki = 412;

	function hesapla (){

		echo "Sayı bir = $GLOBALS['sayi_bir'] ve Sayı iki = $GLOBALS['sayi_iki'] ";

	}
hesapla();
//Çıktı= Sayı bir = 43  ve Sayı iki = 412
?>

Statik (durgun) Değişkenler

Normal şartlarda fonksiyon etki alanı gibi özel etki alanlarında tanımlanan değişkenler derleryici o kod bloğunu terk ettiği zaman değerini kaybeder ancak statik değişkenler değerlerini kaybetmezler ilk tanımlamadan sonra yeni değerlerini sürekli olarak korumaya devam ederler örnek vermek gerekirse:

<?php
function fonksiyon()
{
    $sayi_bir = 20;
    echo $sayi_bir;
    $sayi_bir++;
}
?>

Böyle bir kod bloğu  her çağrıldığında $sayi_bir değişkeni tekrar tekrar 20 ye eşitleneceği için kod bloğunun en alt satırında $sayi_bir değişkenini artırmanın hiç bir anlamı olmayacaktır. Ancak statik bir değişken tanımlaması yaparsak işler biraz farklı ilerliyor.
 

<?php
function fonksiyon()
{
    static $sayi_bir = 20;
    echo $sayi_bir;
    $sayi_bir++;
}
?>


Yukarıda gördüğünüz kod bloğunda fonksiyon() değişkeni bir kez çağrıldığı zaman $sayi_bir değişkeni 20 değerine eşitlenir ancak bir kez daha çağrıldığında bu değer tekrar 20 ye eşitlenmez ve fonksiyon her çağrıldığında değer artırılır , bu sayede anlıyoruz ki statik değişkenler sadece bir kez açılış değeri ile ilişkilendirir.

Statik değişken tanımlama kuralları

<?php
function fonksiyon(){
    static $degisken = 0;          // Bu kullanım geçerli
    static $degisken = 1+2;        // Bu kullanım geçerli  (PHP 5.6 sürümünden sonra)
    static $degisken = sqrt(121);  // Bu kullanım geçersiz (çünkü bir işlevle atandığı için)

    $degisken--;
    echo $degisken;
}
?>

Konu hakkında merak ettikerinizi yorumlar kısmında belirtebilirsiniz.