PHP:如何将变量添加到函数名称?

时间:2016-03-15 15:35:31

标签: php function variables

我有一个带回调的课程。我将一个字符串传递给类,并使用该字符串作为回调函数调用回调。它有点像这样:

$obj->runafter( 'do_this' );

function do_this( $args ) {
    echo 'done';
}

我要做的是在循环中运行它,以便函数不会被多次写入我想在函数名称中添加一个变量。我想做的是这样的事情:

for( $i=0;$i<=3;$i++ ) :
    $obj->runafter( 'do_this_' . $i );

    function do_this_{$i}( $args ) {
        echo 'done';
    }
endfor;

关于如何在PHP中完成此任务的任何想法?

3 个答案:

答案 0 :(得分:6)

我会直接将函数作为闭包传递:

for($i=0; $i<=3; $i++) {
    $obj->runafter(function($args) use($i) {
        echo "$i is done";
    });
}

请注意,如果需要,您可以use($i)在回调中使用此局部变量。

以下是一个工作示例:https://3v4l.org/QV66p

有关callables和closures的更多信息:

http://php.net/manual/en/language.types.callable.php

答案 1 :(得分:2)

您可以将函数赋值给变量并创建闭包也可以通过使用关键字

将变量传递到匿名函数的范围之外
$callback = function($args) use($i) {
    echo "$i is done";
};

for ($i = 0; $i <= 3; $i++) {
    $arg = "some argument";
    $obj->runafter($callback($arg));
}

有用的链接:

答案 2 :(得分:0)

根据您的问题,您应该在循环之前定义您的函数。然后,您不必担心在每次循环迭代时重新定义它。

function do_this( $args ) {
    echo 'done';
}

for( $i=0;$i<=3;$i++ ) :
    $obj->runafter( 'do_this' );
endfor;