0

変数から名付けられた関数を実行しようとしています。構文エラーはありません。温度は返されません。問題が関数自体にあるのか、eval にあるのかはわかりません。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

set 関数名の後にパラメータを渡す必要があります。サンプルを見る:

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 に答える