Değişken değişkenler
Bazen değişken değişken isimlerine sahip olabilmek kullanışlı olur.
Bu, dinamik olarak belirtilebilen ve kullanılabilen bir değişken
ismidir. Normal bir değişken şöyle bir deyimle atanır:
Bir değişken değişken bir değişkenin değerini alır ve bir değişkenin
ismi gibi davranır. Yukarıdaki örnekteki, merhaba,
iki tane dolar imi ile bir değişken ismi olarak kullanlabilir
Bu noktada PHP sembol ağacında iki değişken tanımlanmış ve saklanmış
olur: $a "merhaba" içerirken
$merhaba ise "dünya" içerir. Bu nedenle, aşağıdaki
iki örnek aynı sonucu üretir:
Her ikisi de 'merhaba dünya' üretir.
Değişken değişkenleri dizilerle kullanmak için, bir anlam karmaşası
sorununu çözümlemeniz gerekir. $$a[1] yazdığınızda
değişken olarak $a[1]'i mi kastettiğiniz, yoksa
$$a'nın değişken olmasını isteyip [1] ile o
değişkenin indisini mi kastettiğinizi çözümleyicinin bilmesi gerekir. Bu
anlam karmaşasını çözümleyen söz dizimi, birinci durum için
${$a[1]} ve ikinci için
${$a}[1]'dir.
Sınıf özelliklerine değişken özellik isimlerinden de erişilebilir.
Değişken özellik ismi çağrının yapıldığı etki alanı içinde çözümlenir.
Örneğin, $foo->$zam gibi bir değişkeniniz olsun; burada
$zam'ın etki alanı incelenir ve $foo
özelliğinin ismi olarak kullanılır. $zam, bir diziye
erişim için kullanılıyorsa yine aynı durum geçerlidir.
Kaşlı ayraçlar, özellik ismini açıkça sınırlamak için de kullanılabilir.
Bir dizi içinde bulunan bir özelliğin değerlerine erişmek için ya da
özellik ismi başka türlü geçerli olmayan karakterler (örn,
json_decode() veya SimpleXML ile üretilmiş) içeriyorsa çok
kullanışlıdır.
Örnek 1 - Değişken özellik örneği
<?php
class foo {
var $bar = 'I am bar.';
var $arr = array('I am A.', 'I am B.', 'I am C.');
var $r = 'I am r.';
}
$foo = new foo();
$bar = 'bar';
$baz = array('foo', 'bar', 'baz', 'quux');
echo $foo->$bar . "\n";
echo $foo->{$baz[1]} . "\n";
$start = 'b';
$end = 'ar';
echo $foo->{$start . $end} . "\n";
$arr = 'arr';
echo $foo->{$arr[1]} . "\n";
?>
Yukarıdaki örneğin çıktısı:
I am bar.
I am bar.
I am bar.
I am r.
Uyarı
Değişken değişkenlerin işlev ve sınıf yöntemleri içinde PHP'nin
Süper küresel
dizileri ile kullanılamayacağını unutmayınız.
$this
değişkeni de dinamik olarak gönderimli
olamayan özel bir değişkendir.