PHP在变量名中使用变量值

时间:2015-08-21 14:37:04

标签: php string variables scope

我有一些像这样的变量:

$barbarian = 7;
$archer = 7;
$giant = 7;

这样的功能:

function army($troopData,$troop,$thing){

    if(isset($troop) && $troopData+1 == ${"$thing"}){
        $troopData++;
        $text = "<span class='army-icon active top-lvl $thing-icon'><span>$troopData</span></span>";
    }elseif(isset($troop)){
        $troopData++;
        $text = "<span class='army-icon active $thing-icon'><span>$troopData</span></span>";
    }else{
        $text = "<span class='army-icon $thing-icon'><span></span></span>";
    }
  return $text;

}

注意第一个if: if(isset($troop) && $troopData+1 == ${"$thing"}){

这个函数被调用如下: army($troopslvl4000000,$troops4000000, "barbarian"); army($troopslvl4000001,$troops4000001, "archer");

最后一个参数在函数中命名为$ thing。

所以我需要第一行if检查是否:

1)$troop已设置。 2)$troopData+1 == $barbarian(或者对于第二个函数调用,$archer是什么东西)

但它不起作用。它总是使用elseif或else。第一个如果永远不会被称为......

2 个答案:

答案 0 :(得分:1)

您可以使用如下构造:

$s1 = "somevar";
$$s1 = "test";
echo $somevar; // will output: test

这在你的代码中:

function army($troopData,$troop,$thing){
    global $barbarian;
    global $archer;
    global $giant;

    if(isset($troop) && $troopData+1 == $$thing){
    ...
}

编辑:

请注意,您应该允许访问函数内的$barbarian等变量!

答案 1 :(得分:0)

为了避免错误,可以使用oporate的优先级添加括号,如

if(isset($troop) && ( $troopData+1 == ${"$thing"})

在这种情况下,评论说您不必:http://php.net/manual/fa/language.operators.precedence.php