PHP Fonksiyon İçerisinde Global Değişkeni Değiştirmek

Merhabalar, belki hiç kullanmayacağınız belki de çok önemli bir yerde kullanmak zorunda kalacağınız ama nasıl yapacağınızı kestiremeyeceğiniz bir konuya değineceğim.

PHP eğitim setlerinde şu ifadeyi çoğunlukla duyarsınız: “Fonksiyon içine gönderilen değer değiştirilse bile fonksiyon dışındaki değişken bu düzenlemeden etkilenmez.“. Aslına bakarsanız burada yanlış bir anlatım yok fakat php teknolojisinin ilerlemesi ile bu yapılamaz denilen işlem kolaylıkla yapılabilir hale gelmiştir.

Aslında bahsettiğimiz olay C dilindeki pointer (gösterici) mantığında çalışmaktadır. Basitçe çalışma sistemini anlatacak olursak pointer değişkeni içinde ana değişkenimizin bellekte (RAM) bulunduğu alanı gösterir. Yani biz pointer üzerinden değişiklik yaptığımızda asıl değişkenin bellekteki değerini değiştiririz ve böylelikle ana değişkenimizi de güncellemiş oluruz.

Önce ne yapmak istediğimizi ve standart şekilde uyguladığımızda nasıl bir sonuç alacağımıza bakalım.

Yukarıda yapılan işlem isim değişkenini degistir() fonksiyonuna göndermek ve fonksiyon içinde isim değişkenine samet yazdırmak oldu ama fonksiyonu çalıştırdıktan sonra isim değerini echo ile ekrana yazdırdığımızda ilk tanımladığımız tuna değeri ekrana bastırıldı. Çünkü fonksiyon içinde değişen isim değeri aslında bizim gerçek isim değişkenimiz değildi ve sadece fonksiyon içinde geçerli kaldı.

Peki biz fonksiyon içinde değişen değeri tüm kodlar için değiştirmek istiyorsak ne yapmalıyız? Bunun için degistir() fonksiyonunda belirttiğimiz isim parametresine ampersand (&) ekleyerek bunu bir pointer olarak kullanabiliriz ve böylelikle tüm değerleri değiştirebiliriz.

Bu şekilde kullanıdığımız taktirde tüm kodlarda değişikliği sağlamış olduk.

Bonus!

Ekstra olarak yine aynı kavramda olan bir başka konuya da değinmek istiyorum. Bir değişkeni başka bir değişkene eşitlediğimiz zaman bir değişkenin değiştiği zaman diğer değişkenin de otomatik olarak aynı değeri almasını sağlamasını yine ampersand kullanarak yapabiliriz.

Aynı kod bloğu içinde öncelikle b değerini a değerine eşitledik ve a değeri değiştiğinde b değerinin ilk eşitlediğimiz değerde kaldığını gördük. Sonraki işlemde ise =& operatörünü kullanarak (aslında yapılan işlem $d = &$c) c değeri değiştiğinde d değerinin de otomatik olarak c değerine eşit olmasını sağlamış olduk.

Umarım işinize yarayacak bir içerik olmuştur, konu hakkındaki düşüncelerinizi veya aklınıza takılan alanları yorum olarak belirtebilirsiniz.

Bir Cevap Yazın