0

我正在尝试运行一个从变量命名的函数。没有语法错误。不返回温度。我不确定问题出在函数本身还是 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);
4

4 回答 4

4

尝试这样做:

$func = 'get'.$spectralclass.'temp';

$temp = $func($luminosityclass, $subclass);
于 2012-11-03T01:20:56.160 回答
2

你可能会更好地做类似的事情

$functionName = 'get' . $spectralclass . 'temp';
$temp = $functionName($luminosityclass, $subclass);

这就是 PHP 手册所称的“变量函数”。在大多数情况下,PHP 允许您将字符串变量视为函数名,这样做比eval.

于 2012-11-03T01:21:05.460 回答
1

您需要在设置函数名称后传递参数。查看示例:

function getAtemp($a = 'default') {
    echo $a;
}

$name = 'Trest';
$function = 'A';

$temp = 'get' . $function . 'temp';

echo($temp('teste'));

此外,从 Eric Lippert 中阅读:Eval is Evil

于 2012-11-03T01:23:19.687 回答
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

于 2012-11-03T01:20:11.217 回答