我有一些像这样的变量:
$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。第一个如果永远不会被称为......
答案 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