2009-07-31 11 views
2

Ich habe ein PHP5 Buch gelesen, und der Autor häufig diese Syntax

${"{$something}_somethingelse"}; 

Ich habe keine Ahnung, verwendet, was das bedeutet. Wird ein Variablenname dynamisch generiert?

Jemand hilf mir aus?

+3

Die oben gewählte Antwort ist korrekt; Ich werde jedoch sagen, dass ich als langjähriger PHP-Entwickler diese selten benutze und die meiste Zeit halte ich sie für einen Code-Geruch. –

+3

Ich helfe dir aus - kaufe ein anderes Buch. Definitiv Code-Geruch, um diese "gemeinsam" zu verwenden – Draemon

Antwort

9

Es ist eine Sprache-Funktion Variable variables genannt.

Betrachten Sie das folgende Stück Code:

$a = 'hello'; 

Dieser ziemlich geradlinig ist. Er erstellt die Variable $a und setzt seinen Wert auf 'hello'.

die mit gehen lassen:

$$a = 'world'; 
${$a} = 'world'; 

Grundsätzlich, da $a = 'hello', sind die beiden Aussage entspricht tun:

$hello = 'world'; 

folgendes So:

echo "$a ${$a}"; 

die Ist Äquivalent zu tun:

echo "$a $hello"; 

Zahnspange { }

Die geschweiften Klammern werden verwendet, Mehrdeutigkeit Probleme zu verhindern.Beachten Sie Folgendes:

$$a[1] = 'hello world'; 

Haben Sie eine Variable, nachdem der Wert von $a[1] Namen zuweisen möchten oder haben Sie den Index 1 der Variablen nach $a Namen zuweisen möchten?

Für die erste Wahl, würden Sie es als solches schreiben:

${$a[1]} = 'hello world'; 

Für die zweite Wahl:

${$a}[1] = 'hello world'; 

Ihr Beispiel

für Ihr Beispiel jetzt.

Lassen Sie uns das betrachten:

$something = 'hello'; 

Arbeiten mit dem Beispiel als solche:

${"{$something}_somethingelse"} = 'php rocks'; 

im Wesentlichen entsprechen würde tun:

$hello_somethingelse = 'php rocks'; 
+0

Ich brauche eine mehr angenommene Antwort! Verdammt nochmal! –

+2

Bitte denken Sie daran, dass variable Variablen normalerweise eine schlechte Idee sind, da es normalerweise die Aufgabe von Arrays (oder Objekten) ist, die Aufgabe zu erledigen. –

1

Das wird die {$something} durch den Wert von $ etwas ersetzen.

Ich denke, die inneren geschweiften Klammern nur zur besseren Lesbarkeit sind und wenn zu helfen, eine Variable Variable tut $object->property usw.

Da es auch in einer Variablen zu sein scheint, wird diese genannt.

Zum Beispiel

$foo = 'bar'; 

$$foo = 7; 

echo $bar; 

// produces 7; 
+0

Ich hoffe, Sie haben nichts dagegen - ich missverstand das erste Mal, dass ich es gelesen habe. – Draemon

+0

Stört Sie nicht ein upvote? Das ist ok. – alex

1

Brackets erlauben Sie erweiterte Variablennamen zu machen. Es wäre Ihr Fall, wenn $ etwas gleich wäre zu testen wäre es:

 
${"test_somethingelse"}; 

Das ist nur ein erweiterter Variablenname.

Hier ist ein Beispiel.

Mit Variablen Variables, wie alle anderen erwähnt, können Sie Variablen basierend auf anderen Variablen erstellen. Also in Ihrem Fall, er machte eine Variable basierend auf $ etwas Wert

 
$something = "test"; 

${"{$something}_somethingelse"}; 

turns into 

${"test_somethingelse"}; 

2

Sie sind 'variable Variablen'. Siehe this.