2012-08-23 18 views
8

Statt mitPHP dynamische Namen für Objekteigenschaft

$object->my_property 

ich so etwas wie dieses

$object->"my_".$variable 
+0

Eine Sache zu beachten ist, dass während Sie dynamische Variablen verwenden können, ist es oft vorzuziehen, explizit zu sein. Es erleichtert das Refactoring später. Stellen Sie sich vor, Sie suchen nach einer Eigenschaft namens "my_cat", die Sie nicht finden würden, wenn sie dynamisch deklariert wird. – Revent

Antwort

23

Verwenden geschweiften Klammern tun wollen wie so:

$object->{'my_' . $variable} 
6

Wie wäre es damit:

$object->{"my_$variable"}; 

Ich denke, this section der PHP-Dokumentation könnte hilfreich sein. Kurz gesagt, kann man einen beliebigen Ausdruck in geschweifte Klammern schreiben; Sein Ergebnis (eine Zeichenkette) wird ein Name der Eigenschaft, die adressiert werden soll. Zum Beispiel:

$x = new StdClass(); 
$x->s1 = 'def'; 

echo $x->{'s' . print("abc\n")}; 
// prints 
// abc 
// def 

... doch in der Regel ist viel besser lesbar das Ergebnis dieses Ausdrucks in eine temporäre Variable zu speichern (die btw, kann einen aussagekräftigen Namen gegeben werden). Wie folgt aus:

$x = new StdClass(); 
$x->s1 = 'def'; 

$someWeirdPropertyName = 's' . print("abc\n"); // becomes 's1'. 
echo $x->$someWeirdPropertyName; 

Wie Sie sehen, macht dieser Ansatz geschweiften Klammern nicht notwendig und gibt einen Leser zumindest einige Beschreibung dessen, was den Eigenschaftsnamen komponiert.)

P.S. print wird nur verwendet, um die potentielle Komplexität von Variablennamenausdrücken zu veranschaulichen; Während diese Art von Code häufig in Zertifizierungstests verwendet wird, ist es ein großes "Nein-Nein", solche Dinge in der Produktion zu verwenden.)

+0

Danke, wenn ich zwei Ticks geben könnte, hättest du auch einen. – user1209203