从变量创建函数

时间:2012-11-03 01:15:16

标签: php

我正在尝试运行一个以变量命名的函数。没有语法错误。温度不会返回。我不确定问题是关于函数本身还是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 个答案:

答案 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