执行函数动态传递给表单

时间:2013-06-05 22:54:17

标签: php

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

Eg ;
$function = 'convert_number_to_words';

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

函数convert_number_to_words必须用$ row-&gt; num作为参数。如何在上面的echo语句中实现。

3 个答案:

答案 0 :(得分: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));

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

答案 1 :(得分: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>';
}

请记住,必须定义该功能,否则您将收到错误。

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

答案 2 :(得分:0)

它也有效:

$function = 'convert_number_to_words';

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