在自動化某些代碼的過程中,我期望根據字符串是什麼來調用函數。如何使用從字符串變量生成的函數名稱調用函數
例如,我有一個變量$somevar
,它被設置爲字符串「This」。現在我想運行一個函數doThis();
所以,我希望我能寫do.$somevar($var,$var2)
。我希望它運行doThis($var1,$var2)
。
這可能嗎?
在自動化某些代碼的過程中,我期望根據字符串是什麼來調用函數。如何使用從字符串變量生成的函數名稱調用函數
例如,我有一個變量$somevar
,它被設置爲字符串「This」。現在我想運行一個函數doThis();
所以,我希望我能寫do.$somevar($var,$var2)
。我希望它運行doThis($var1,$var2)
。
這可能嗎?
您可以使用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.";
}
據我所知call_user_func適用於任何可調用的函數,甚至內置在php函數中,比如strtoupper,sprintf,... – ChrisR 2010-04-07 06:29:47
@ChrisRamakers你說得對,謝謝你指出了這一點。 – MiffTheFox 2010-04-07 06:31:48
我不認爲你能做到這樣,但你可以這樣做:
call_user_func('do'. $somevar, $var, $var2);
或
$func = 'do' . $somevar;
$func($var, $var2);
這是在PHP完全合法
$myVar = 'This';
$method = 'do'.$myVar; // = doThis
$class = new MyClass();
$class->$method($var1, $var2, ...); // executes MyClass->doThis();
$fname="do$somevar";
$fname();
但是在使用之前你應該三思而後行。
檢查call_user_func或call_user_func_array
是爲$ somevar已知和有限的或未知的無限可能性的範圍內? – Drew 2010-04-07 06:24:01