2010-11-25 17 views
1

Ich versuche, die gleiche Funktion dosomething() zu mehreren Variablen $lastsum $avatar $angels $city $square in PHP durchzuführen. durch die Auflistung der Namen der Variablen in einem String-Array und die Funktion, mit einer for-SchleifeWeitergabe von Variablennamen als String

$lastsum->dosomething(); 
$avatar->dosomething(); 
$angels->dosomething(); 
$city->dosomething(); 
$square->dosomething(); 

Gibt es eine Möglichkeit, diesen Code sauberer zu machen. Ich bin auf der Suche nach so etwas. Kennt jemand den richtigen Weg, dies in PHP zu tun?

$all = ['lastsum' , 'avatar', 'angels' , 'city' , 'square']; 
foreach (....){ 
    $(nameofvariable)->dosomething(); 
} 

Antwort

4

Was ist los mit

$all = array($lastsum , $avatar, $angels, $city, $square); 
foreach (....){ 
    $variable->dosomething(); 
} 

Um das zu erreichen genau, was Sie‘Sie können jedoch die Verwendung von eval() machen Suche nach Variablenvariablen

$all = array('lastsum' , 'avatar', 'angels' , 'city' , 'square'); 
foreach ($all as $x) { 
    $$x->dosomething(); 
} 

Viele Leute halten dies für einen schlechten Stil.

1

Wenn Sie Variablen verwenden Variablen wollen, wäre es so aussehen:

function dosomething(&$var) { 
    $var .= 'bar'; 
} 

$a = 'foo'; 
$b = 'bar'; 
$vars = array('a', 'b'); 
foreach ($vars as $var) { 
    dosomething($$var); 
} 

var_dump($a); // foobar 
var_dump($b); // barbar 

Wenn $a ein Objekt ist, dann können Sie $$var->dosomething() tun.

BEARBEITEN: HINWEIS: Wenn Sie Variablenvariablen verwenden müssen, sollten Sie in den meisten Fällen eine geeignete Datenstruktur wie ein Array verwenden.

+1

Variable Variablen ^.^Oh PHP ... – mpen

+1

@Mark: Heh. Ich habe noch eine Verwendung für Variablen gefunden. Ich denke, es wurde von der 'register_globals' Ära oder so übernommen. Weil ein Array ähnliche Funktionen und vieles mehr bietet. – netcoder

1

Keine elegante Lösung.

$all = array('lastsum' , 'avatar', 'angels', 'city', 'square'); 

foreach ($all as $var) { 
    $code = "\$${var}->dosomething();"; 
    eval($code); 
} 

Andernfalls speichern die Objekte in einem Array:

$all = array($lastsum , $avatar, $angels, $city, $square); 

foreach ($all as $obj) { 
    $obj->dosomething(); 
} 
+2

Warum eval? Du brauchst es überhaupt nicht ... – netcoder

+1

Ich muss fragen - warum eval? Warum führst du nicht gerade den $ code dort aus? –

+0

Netcoder und Zenph: Oh! Das war mir nicht bewusst. Danke, dass du es aufgezeigt hast. –

1

Eine weitere Alternative:

$all = array('lastsum' , 'avatar', 'angels' , 'city' , 'square'); 

foreach ($all as $x) { 
    $GLOBALS[$x]->dosomething(); 
} 

Nicht sicher, ob Sie die Methode aus dem GLOBALS ruft tun können superglobal, aber man kann am ehesten Zugang statische Eigenschaften/Funktionen.

Verwandte Themen