2012-07-28 87 views
1

是否有一個基於字符串,數組或類似函數運行函數的PHP函數或命令?基本上,如果字符串「時間」通過,我想要time()返回。理想情況下,我想這也支持傳遞的參數。不過,我只是希望這是個人功能。我不想eval()整個代碼塊,原因很明顯。運行函數的PHP函數(基於字符串)?

這樣的事情是否存在 - 或者,最好是 - 它是否是PHP中的native?

回答

3

嘗試call_user_func()http://php.net/manual/en/function.call-user-func.php

第一個參數是表示函數名稱的字符串。第二個參數可以是單個參數或參數數組。

編輯:

它甚至會支持原生功能,如時間(),你問。試試看如下:

echo call_user_func('time'); 
+0

啊,這看起來像是我在找的東西!謝謝!然而,在我接受你的答案之前,它只支持定義的功能嗎?或者是否支持所有函數(如'time()')? – Nathanael 2012-07-28 05:52:07

+0

它絕對支持所有功能! – 2012-07-28 05:54:16

3

您可以使用包含函數名稱的變量調用函數,並將任何參數傳遞給該函數。嘗試:

<?php 

$func = 'strtoupper'; 

$res = $func('i am uppercase'); 

echo $res; // I AM UPPERCASE 

variable functionsvariable variables爲好。如上所述,call_user_func()也適用。

爲安全起見,您可以撥打:

if (function_exists($func)) { ... } 

調用基礎,以確保你避免錯誤的功能之前。您可以使用ReflectionFunctionAbstract::getNumberOfParameters來確定函數接受的參數數量。

+0

嗯,有趣!我從來不知道這件事。感謝您的想法!儘管其他答案更好地回答了這個問題,但我最終可能會使用它,所以+1對你來說! – Nathanael 2012-07-28 06:19:09