Php Variable Variables (Değişken Değişkenler)

Merhaba. 2-3 gün önce ilgili twitte iddia ettiğim üzere web applications üzerine güzel bir security trick yazacaktım. Ancak erindim ve twitte “security trick” yazmamışım sadece “trick” yazmışım. Bu şekilde kendimi haklı çıkartarak Php üzerine güzel birşeyler yazayım dedim. En azından “hani security ile ilgili” olacaktı diyemeyeceksiniz. Twitte “security” dememişim 🙂

Bahsedeceğimiz konu “Variable Variables” yani “Değişken Değişkenleri”. Yanlış bilmiyorsam (eğer yanlış biliyorsam yorum olarak beni uyarın) bu metod sadece Php’de var. Php aşırı ilginç bir dil olduğundan bu tarz yöntemleri artık normal karşılamaya başladım. Bu yöntemi ilk gördüğümde hiçbirşey anlamamıştım. Geçenlerde bir eğitimde bir arkadaşın beni aydınlatması üzerine kafamda oturdu ve “insan gerçekten hayret ediyor” tepkisini verdim.

Dilim döndüğünce anlatmaya çalışayım ve sonra örnek göstereyim. Değişken nedir? Adı üstünde “değişken”. İçindeki değer değişebilen bir veritutucu(veritutucu’yu şuan uydurdum; oturgaçlı götürgeç gibi birşey oldu). Öyle bir algoritmaya girmek zorunda kaldınız ki bir değişkenin içindeki değeri; farklı bir değişken olarak tanımlamak zorunda kaldınız. Şöyle anlatayım; “isim” diye bir değişkenimiz olsun ve içindeki değeri GET’den alıyor olsun. GET’ten yani 3. kullanıcıdan dinamik olarak alacağınız bir değer var ortada. GET’ten gelen değer her neyse o değeri hem “isim” değişkeninin değeri olarak atayıp hemde ayrı bir değişken olarak tanımlamanız gerekiyor. Heh işte burada bu yöntem yardımınıza koşuyor.

Saçma da olsa anlattığımız örneğin uygulamasını yapalım;


<?php
$gelendeger = $_GET["deger"]; // "index.php?deger=omer" olarak girildiğini varsayalım.
$isim = $gelendeger;
$$isim = "deneme";

echo $isim; // çıktı: omer
echo $omer; // çıktı: deneme
?>

Şimdi bu kodu satır satır yorumlayalım;

  • İlk satırda GET’ten gelen veriyi “gelendeger” değişkenin içine attık.
  • 2. satırda aldığımız değeri “isim” değişkenine aktardık.
  • 3. satırda “$$isim” dedik.

3. adımdakini biraz açalım; “$isim” değişkenin içinde “omer” değeri vardı. “$isim”‘in önüne bir adet daha dolar işareti koyup “$$isim” diye yazık. “$isim”‘in içinde “omer” değeri olduğundan artık “$isim” görüğü her yere “omer” yazacaktır. Ve böylelikle Php, o satırın yeni hali “echo $omer” miş gibi yorumlayacaktır.

Son 2 satırda da zaten çıktıları görebiliyoruz. Php.net’te yer alan çok güzel bir örnek var. Eğer buraya kadar kafanızda oturmadıysa bu örnekle tam oturacağına eminim.


<?php

$Bar = "a";
$Foo = "Bar";
$World = "Foo";
$Hello = "World";
$a = "Hello";

echo $a; // çıktı: Hello
echo $$a; // çıktı: World
echo $$$a; // çıktı: Foo
echo $$$$a; // çıktı: Bar
echo $$$$$a; // çıktı: a
echo $$$$$$a; // çıktı: Hello
echo $$$$$$$a; // çıktı: World

?>

İlk 5 satırda normal olarak değişken tanımlamaların görüyorsunuz. Şimdi ekrana çıktı verdiğimiz satırlara geçelim.

  • “$a”nın içinde “Hello” değeri olduğundan ekrana “Hello” çıktısını basacaktır.
  • “$a”nın içinde “Hello” değeri vardı ve “$$a” şeklinde yazılmış. Bu satır “$Hello” gibi yorumlanacaktır ve “$Hello” nun içinde “World” değeri olduğundan ekrada “World” çıktısı basılacaktır.
  • “$$a”, “$Hello” gibi yorumlanmıştı ve içinde “World” değeri vardı. “$$$a” ise “$$Hello” yani “$World” olarak yorumlanacaktır ve “$World” değişkeninn içinde “Foo” değeri olduğundan ekrana “Foo” çıktısı basılacaktır.

gibi gibi gidiyor. Bir yazı daha sona eriyor. Eğer blogumu takip ediyor ve özellikle yazmamı isteidğiniz birşey varsa lütfen bana herhangi bir yol ile bildirin. Twitter olur Facebook olur Email olur Yorum olur. Yeterki bildirin 🙂

Comments on this post

  1. Aklıma php lyk2015 geldi ne günlerdi be güzel yazı kalemine sağlık 🙂

  2. Selamlar, burdan php ile yeni kod yazmaya başlayan arkadaşlara sesleniyorum. Bunu bilin ama hiç bir yerde kullanmayın / uygulamayın. Eğer kullanırsanız sizden sonra kodu okuyan kişi tarafından küfür yeme olasılığınızı bir hayli arttırmış olacaksınız. Bilginize 🙂

  3. Hamza

    Mamoste ilk defa böyle bir şey ile karşılaştım. Eğlendirici 🙂

  4. Tolga ÜN

    Bu a elemanı atanmışları geriye doğrumu takip ediyo? yani $$a ile amaç ;”$a dan önce ne atanmışmı?” demek?

Leave a Reply to Yunus Oksuz Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Trackbacks and Pinbacks

No trackbacks.

TrackBack URL