2010-04-07 68 views
1

在自動化某些代碼的過程中,我期望根據字符串是什麼來調用函數。如何使用從字符串變量生成的函數名稱調用函數

例如,我有一個變量$somevar,它被設置爲字符串「This」。現在我想運行一個函數doThis();

所以,我希望我能寫do.$somevar($var,$var2)。我希望它運行doThis($var1,$var2)

這可能嗎?

+0

是爲$ somevar已知和有限的或未知的無限可能性的範圍內? – Drew 2010-04-07 06:24:01

回答

4

您可以使用call_user_func做到這一點。可以使用is_callable來檢查錯誤情況。

if (is_callable("do" . $somevar)) { 
    call_user_func("do" . $somevar, $var1, $var2); 
} else { 
    echo "Function do" . $somevar . " doesn't exist."; 
} 
+0

據我所知call_user_func適用於任何可調用的函數,甚至內置在php函數中,比如strtoupper,sprintf,... – ChrisR 2010-04-07 06:29:47

+0

@ChrisRamakers你說得對,謝謝你指出了這一點。 – MiffTheFox 2010-04-07 06:31:48

0

在php中你用 - >代替。 這將工作:

$foo = new someObject; 
$somevar = 'function_name'; 
$foo->$somevar('x'); 
+0

我想Roeland正在使用。作爲字符串連接運算符 – kibibu 2010-04-07 06:29:05

+0

應該是'$ foo';) – ChrisR 2010-04-07 06:30:31

3

我不認爲你能做到這樣,但你可以這樣做:

call_user_func('do'. $somevar, $var, $var2); 

$func = 'do' . $somevar; 
$func($var, $var2); 
1

這是在PHP完全合法

$myVar = 'This'; 

$method = 'do'.$myVar; // = doThis 
$class = new MyClass(); 
$class->$method($var1, $var2, ...); // executes MyClass->doThis(); 
1
$fname="do$somevar"; 
$fname(); 

但是在使用之前你應該三思而後行。

相關問題