PHP:如何在函数名中添加变量?

PHP:如何在函数名中添加变量?,php,function,variables,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 ) { e

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

$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;
我想做的是在循环中运行这个函数,这样函数就不会被多次写入。我想在函数名中添加一个变量。我想做的是这样的:

$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;
for($i=0;$irunafter('do_this.$i));
函数do_this_{$i}($args){
回音“完成”;
}
endfor;

关于如何在PHP中实现这一点,有什么想法吗?

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

for($i=0; $i<=3; $i++) {
    $obj->runafter(function($args) use($i) {
        echo "$i is done";
    });
}
用于($i=0;$irunafter(函数($args)使用($i){
回显“$i已完成”;
});
}
请注意,如果需要,可以
使用($i)
在回调中使用此局部变量

以下是一个工作示例:

有关可调用项和闭包的更多信息:


根据你的问题,你应该在循环之前定义你的函数。这样你就不必担心每次循环迭代都会重新定义它

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

for( $i=0;$i<=3;$i++ ) :
    $obj->runafter( 'do_this' );
endfor;
函数执行此操作($args){
回音“完成”;
}
对于($i=0;$irunafter('do_this');
endfor;

您可以将函数分配给变量并创建闭包,也可以通过use关键字将变量传递到匿名函数范围之外

$callback = function($args) use($i) {
    echo "$i is done";
};

for ($i = 0; $i <= 3; $i++) {
    $arg = "some argument";
    $obj->runafter($callback($arg));
}
$callback=函数($args)使用($i){
回显“$i已完成”;
};
对于($i=0;$i runafter($callback($arg));
}
有用链接:


谢谢,这真是疯狂x)不错!@KyleE4K刚刚更新了一个工作示例链接,我想知道C#(更强类型的语言)是否可以实现这一点-研究时间haha@KyleE4K当然有可能。在C#中,您可以使用DelegateWorked!谢谢!向上投票显示如何首先将函数定义为闭包。请注意,在函数定义末尾需要一个分号,如果启用了通知,您将得到
通知:未定义变量:i