我正在尝试运行一个以变量命名的函数。没有语法错误。温度不会返回。我不确定问题是关于函数本身还是eval。到目前为止,评估主题的变化尚未奏效。
function getBtemp($lum, $sub){
$tempsB = array(
"V" => array( 30000, 25400, ... ),
"III" => array( 29000, 24000, ... ),
"I" => array( 26000, 20800, ... ) );
if($lum == "VI"){ $lum = "V"; }
else if($lum == "IV"){ $lum = "III"; }
else if($lum == "II" || $lum == "Ib" || $lum == "Ia" ){ $lum = "V"; }
return $tempsB['$lum']['$sub']; }
// Variables:
$spectralclass = "B";
$luminosityclass = "V";
$subclass = 5;
// Needed:
$temp = getBtemp($luminosityclass, $subclass);
// Functions are named from spectral class, e.g. get.$spectralclass.temp()
// Attempt:
$str = "$temp = get".$spectralclass."temp($luminosityclass, $subclass);";
eval($str);
答案 0 :(得分:4)
尝试这样做:
$func = 'get'.$spectralclass.'temp';
$temp = $func($luminosityclass, $subclass);
答案 1 :(得分:2)
你可能最好做一些像
这样的事情$functionName = 'get' . $spectralclass . 'temp';
$temp = $functionName($luminosityclass, $subclass);
这是PHP手册调用的"variable function"。在大多数情况下,PHP允许您将字符串变量视为函数名称,并且这样做比eval
更安全(更严格,更不容易出错)。
答案 2 :(得分:1)
您需要在设置函数名后传递参数。查看样本:
function getAtemp($a = 'default') {
echo $a;
}
$name = 'Trest';
$function = 'A';
$temp = 'get' . $function . 'temp';
echo($temp('teste'));
此外,请阅读Eric Lippert:Eval is Evil
答案 3 :(得分:0)
替换以下行:
$str = "$temp = get".$spectralclass."temp($luminosityclass, $subclass);";
通过
$str = '$temp = get'.$spectralclass.'temp($luminosityclass, $subclass);';
或
$str = "\$temp = get".$spectralclass."temp(\$luminosityclass, \$subclass);";
请参阅http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.double