2012-11-03 39 views
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

嘗試這樣做:

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

$temp = $func($luminosityclass, $subclass); 
2

你可能會更好做這樣的事情

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

這是PHP手冊調用"variable function"。在大多數情況下,PHP允許您將字符串變量作爲函數名稱處理,並且這樣做比eval更安全(更具限制性,不易出錯)。

+0

我一半。但無論如何+1 –

1

您需要在設置功能名稱後傳遞參數。查看示例:

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

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

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

echo($temp('teste')); 

此外,從埃裏克利珀閱讀:通過與大解釋爲什麼`eval`是一個壞主意寫這篇Eval is Evil

相關問題