0

这段代码在 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>"; 
} );
4

2 回答 2

3

您可以使用call_user_func()/ call_user_func_array()。您必须将函数名称作为字符串传递。你也可以通过这种方式调用方法和静态方法,请查看手册

您还可以使用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().

于 2012-05-25T18:05:00.277 回答
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>"; 
' ) );
于 2012-05-29T08:52:34.423 回答