簡體   English   中英

PHP:如何將變量添加到函數名稱?

[英]PHP: How to add a variable to a function name?

我有一個回調課。 我將一個字符串傳遞給類,並使用該字符串作為回調函數調用回調。 它有點像這樣:

$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中完成此任務的任何想法?

我會直接將函數作為閉包傳遞:

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

您可以將函數賦值給變量並創建閉包,也可以通過use關鍵字在匿名函數范圍之外傳遞變量

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

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

有用的鏈接:

根據你的問題,你應該在循環之前定義你的函數。 然后,您不必擔心在每次循環迭代時重新定義它。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM