将变量名称作为字符串传递

时间:2010-11-25 20:32:31

标签: php oop variables string

我正在尝试对PHP中的多个变量dosomething()执行相同的函数$lastsum $avatar $angels $city $square

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

有没有办法通过在字符串数组中列出变量的名称来使代码更清晰,并使用for循环执行该函数。我正在寻找这样的东西。有谁知道在PHP中这样做的正确方法?

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

4 个答案:

答案 0 :(得分:4)

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

要实现完全您正在寻找的内容,请使用变量

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

很多人认为这种风格很糟糕。

答案 1 :(得分:1)

如果你想使用变量变量,那就更像是这样:

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

如果$a是对象,则可以执行$$var->dosomething()

编辑:注意:在大多数情况下,如果必须使用变量变量,您可能需要考虑使用适当的数据结构,如数组。

答案 2 :(得分:1)

不是一个优雅的解决方案。但是,您可以使用eval()

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

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

否则,将对象存储在数组中:

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

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

答案 3 :(得分:1)

另一种选择:

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

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

不确定您是否可以从GLOBALS超全局进行方法调用,但您很可能访问静态属性/函数。

相关问题