0

このコードはPHP5.3で非常にうまく動作しますが、PHP5.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 に答える