Manchmal ist es praktisch, veränderbare Variablennamen zu verwenden. Das heißt, der Variablenname einer Variablen kann dynamisch festgelegt und verwendet werden. Eine gewöhnliche Variable wird durch Deklaration festgelegt, zum Beispiel:
<?php $a = 'hello'; ?>
Eine variable Variable erhält den Wert einer gewöhnlichen Variablen als Variablennamen der Variablenvariablen. Im obigen Beispiel kann „Hallo“ als Variablenvariable verwendet werden, nachdem zwei Dollarzeichen ($) verwendet wurden. Beispiel:
<?php $a = 'world'; ?>
Zu diesem Zeitpunkt sind zwei Variablen definiert: Der Inhalt von $a ist „Hallo“ und der Inhalt von $hello ist „Welt“. Daher gibt die folgende Anweisung:
<?php echo "$a ${$a}"; ?>
genau das gleiche Ergebnis aus wie die folgende Anweisung:
<?php echo "$a $hello"; ?>
Beide geben Folgendes aus: Hallo Welt.
Um veränderliche Variablen mit Arrays zu verwenden, muss eine Mehrdeutigkeit behoben werden. Beim Schreiben von $$a[1] muss der Parser also wissen, ob er $a[1] als Variable oder $$a als Variable möchte und die Variable mit dem Indexwert [1] extrahiert. Die Syntax zur Lösung dieses Problems besteht darin, ${$a[1]} für den ersten Fall und ${$a}[1] für den zweiten Fall zu verwenden.
Auf Klasseneigenschaften kann auch über veränderbare Eigenschaftsnamen zugegriffen werden. Veränderbare Eigenschaftsnamen werden im Rahmen des Aufrufs aufgelöst. Beispielsweise wird für den Ausdruck $foo->$bar $bar im lokalen Bereich analysiert und sein Wert als Eigenschaftsname von $foo verwendet. Das Gleiche gilt für $bar, wenn es sich um eine Array-Zelle handelt.
Sie können auch geschweifte Klammern verwenden, um Attributnamen klar abzugrenzen. Am nützlichsten, wenn sich die Eigenschaft in einem Array befindet oder wenn der Eigenschaftsname mehrere Teile enthält oder wenn der Eigenschaftsname unzulässige Zeichen enthält (z. B. von json_decode() oder SimpleXML).
Beispiel Nr. 1 Beispiel für ein Variablenattribut
<?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"; echo $foo->{$arr}[1] . "\n"; ?>
Die obige Routine gibt Folgendes aus:
I am bar. I am bar. I am bar. I am r. I am B.
Warnung
Beachten Sie, dass in PHP superglobale Variablen funktionieren können nicht als veränderliche Variablen in Klassenmethoden verwendet werden. Die Variable $this ist ebenfalls eine spezielle Variable und kann nicht dynamisch referenziert werden.