我正在尝试对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();
}
答案 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超全局进行方法调用,但您很可能访问静态属性/函数。