2010-11-25 5 views
1

J'essaie d'effectuer la même fonction dosomething() à plusieurs variables $lastsum $avatar $angels $city $square en PHP.en passant les noms de variables en tant que chaîne

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

Y at-il un moyen de rendre ce code plus propre en énumérant les noms des variables dans un tableau de chaînes et exécuter la fonction avec une boucle. Je cherche quelque chose comme ça. Est-ce que quelqu'un sait la bonne façon de le faire en PHP?

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

Répondre

4

Quel est le problème avec

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

Pour exactement ce que vous » Recherche, utilisation de variables variables

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

Beaucoup de gens considèrent cela comme un mauvais style.

1

Si vous voulez utiliser des variables variables, il serait plus comme ceci:

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 

Si $a est un objet, vous pouvez le faire $$var->dosomething().

EDIT: NOTE: Dans la plupart des cas, si vous devez utiliser des variables variables, vous pouvez envisager d'utiliser une structure de données appropriée, comme un tableau.

+1

Variables variables ^.^Oh PHP ... – mpen

+1

@Mark: Heh. Je n'ai pas encore trouvé d'utilisation pour les variables variables. Je pense qu'il a été reporté de l'ère 'register_globals' ou quelque chose. Parce qu'un tableau fournit des fonctionnalités similaires et beaucoup plus. – netcoder

1

Pas une solution élégante. Cependant, vous pouvez utiliser eval():

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

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

Sinon, stocker les objets dans un tableau:

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

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

Pourquoi eval? Vous n'en avez pas besoin du tout ... – netcoder

+1

Je dois demander - pourquoi eval? Pourquoi ne pas simplement exécuter le code $ là? –

+0

netcoder et Zenph: Oh! Je n'étais pas au courant de ça. Je vous remercie de le faire remarquer. –

1

Une autre alternative:

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

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

Je ne sais pas si vous pouvez faire des appels de méthode des GLOBALS superglobales, mais vous pouvez accéder plus susceptibles propriétés/fonctions statiques.

Questions connexes