我想对从数据库检索到的记录应用用户定义的函数。要执行的函数动态传递给表单。如何实现。
Eg ;
$function = 'convert_number_to_words';
foreach ($query->result() as $row)
echo '<td>'.$row->num.'</td>';
函数 convert_number_to_words 必须以 $row->num 作为参数执行。如何在上面的 echo 语句中实现。
我想对从数据库检索到的记录应用用户定义的函数。要执行的函数动态传递给表单。如何实现。
Eg ;
$function = 'convert_number_to_words';
foreach ($query->result() as $row)
echo '<td>'.$row->num.'</td>';
函数 convert_number_to_words 必须以 $row->num 作为参数执行。如何在上面的 echo 语句中实现。
您可以使用:
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));
但是你真的应该确保没有人可以在你的服务器上执行任意函数
您可以使用call_user_func
用法:
$function_name = "convert_number_to_words";
foreach ($query->result() as $row) {
echo '<td>' . call_user_func($function_name, $row->num) . '</td>';
}
请记住,必须定义函数,否则会出错。
此外,不要相信用户输入,确保检查指定的功能。例如,您可以使用白名单来执行此操作。
它也有效:
$function = 'convert_number_to_words';
foreach ($query->result() as $row)
echo '<td>'.$function($row->num).'</td>';