2

我想对从数据库检索到的记录应用用户定义的函数。要执行的函数动态传递给表单。如何实现。

Eg ;
$function = 'convert_number_to_words';

foreach ($query->result() as $row)
    echo '<td>'.$row->num.'</td>';     

函数 convert_number_to_words 必须以 $row->num 作为参数执行。如何在上面的 echo 语句中实现。

4

3 回答 3

1

您可以使用:

foreach ($query->result() as $row){
    echo '<td>'. call_user_func($func, $row->num) .'</td>'; 
}

或者(如果您需要传递匿名参数):

foreach ($query->result() as $row){
    echo '<td>'. call_user_func_array($func, array($row->num)) .'</td>'; 
}

另一种解决方案是使用反射:

$func = new ReflectionFunction('yourfunc');
$func->invokeArgs( array($row->num));

但是你真的应该确保没有人可以在你的服务器上执行任意函数

于 2013-06-05T22:56:43.480 回答
1

您可以使用call_user_func

用法:

$function_name = "convert_number_to_words";
foreach ($query->result() as $row) {
    echo '<td>' . call_user_func($function_name, $row->num) . '</td>';
}

请记住,必须定义函数,否则会出错。

此外,不要相信用户输入,确保检查指定的功能。例如,您可以使用白名单来执行此操作。

于 2013-06-05T22:56:51.467 回答
0

它也有效:

$function = 'convert_number_to_words';

foreach ($query->result() as $row)
    echo '<td>'.$function($row->num).'</td>';
于 2013-06-05T23:02:26.640 回答