此代码在PHP 5.3中运行良好,但在PHP 5.2中运行不佳。你怎么能在PHP 5.2中实现这样的东西?
echo "Calling func....<br/>";
function template_func( $data=array(), $func ) {
echo "<ul>";
foreach ($data as $k => $v) {
$func( $v );
}
echo "</ul>";
}
$data = array( 1, 2, 3, 4, 5 );
template_func( $data, function ( $v ) {
echo "<li>$v</li>";
} );
template_func( $data, function ( $v ) {
echo "<li><span class='style'>$v</span></li>";
} );
答案 0 :(得分:3)
您可以使用call_user_func()
/ call_user_func_array()
。您必须将函数名称作为字符串传递。您也可以通过这种方式调用方法和静态方法please check the manual。
您还可以使用is_callable()
来验证参数是否可以作为函数调用。
call_user_func()
的简单示例:
function template_func( $data=array(), $func ) {
echo "<ul>";
foreach ($data as $k => $v) {
call_user_func($func, $v);
}
echo "</ul>";
}
function spannedList ( $v ) {
echo "<li><span class='style'>$v</span></li>";
}
template_func($data, 'spannedList');
另一种方法是使用create_function()
。这样,您甚至不必更改template_func()
。
答案 1 :(得分:2)
只需将匿名函数更改为create_function
:
template_func( $data, create_function( '$v', '
echo "<li>$v</li>";
' ) );
template_func( $data, create_function( '$v', '
echo "<li><span class=\'style\'>$v</span></li>";
' ) );