php foreach循环在函数名中使用变量

php foreach循环在函数名中使用变量,php,function,dynamic,foreach,Php,Function,Dynamic,Foreach,我有一个foreach循环,它为每个数组项创建一个函数。我需要为创建的每个函数指定一个唯一的名称,并希望在函数名称中包含当前数组项,但不知道如何执行此操作 目前,我将函数命名为“function ttm\u global\uu shortcode()”,但我希望它是“function ttm\u global\uu$acf\u field\u shortcode()” 谢谢如果add\u shortcode的第二个参数是回调,我想您不需要创建这样的函数就可以做到 $output = get_fi

我有一个foreach循环,它为每个数组项创建一个函数。我需要为创建的每个函数指定一个唯一的名称,并希望在函数名称中包含当前数组项,但不知道如何执行此操作

目前,我将函数命名为“function ttm\u global\uu shortcode()”,但我希望它是“function ttm\u global\uu$acf\u field\u shortcode()”


谢谢

如果
add\u shortcode
的第二个参数是回调,我想您不需要创建这样的函数就可以做到

$output = get_field($acf_field, 'options');
add_shortcode($acf_field, create_function('',"return '$output';"));

如果仍然要创建函数

$output = get_field($acf_field, 'options');
add_shortcode($acf_field, create_function('',"return '$output';"));
PHP5.3.0之前 使用

PHP5.3.0之后
注意:一个参数被添加到您的函数中。

使用PHP5.3,这可以通过匿名函数完成

$output = get_field($acf_field, 'options');
add_shortcode($acf_field, create_function('',"return '$output';"));
foreach($acf_fields as $acf_field) {
    add_shortcode($acf_field, function() use($acl_field) {
        // ...
    });
}

可以使用create_function方法根据传递的参数创建匿名函数,并为其返回唯一名称

<?php
function process($var1, $var2, $farr)
{
    foreach ($farr as $f) {
        echo $f($var1, $var2) . "\n";
    }
}

// create a bunch of math functions
$f1 = 'if ($a >=0) {return "b*a^2 = ".$b*sqrt($a);} else {return false;}';
$f2 = "return \"min(b^2+a, a^2,b) = \".min(\$a*\$a+\$b,\$b*\$b+\$a);";
$f3 = 'if ($a > 0 && $b != 0) {return "ln(a)/b = ".log($a)/$b; } else { return false; }';
$farr = array(
    create_function('$x,$y', 'return "some trig: ".(sin($x) + $x*cos($y));'),
    create_function('$x,$y', 'return "a hypotenuse: ".sqrt($x*$x + $y*$y);'),
    create_function('$a,$b', $f1),
    create_function('$a,$b', $f2),
    create_function('$a,$b', $f3)
    );

echo "\nUsing the first array of anonymous functions\n";
echo "parameters: 2.3445, M_PI\n";
process(2.3445, M_PI, $farr);

// now make a bunch of string processing functions
$garr = array(
    create_function('$b,$a', 'if (strncmp($a, $b, 3) == 0) return "** \"$a\" '.
    'and \"$b\"\n** Look the same to me! (looking at the first 3 chars)";'),
    create_function('$a,$b', '; return "CRCs: " . crc32($a) . ", ".crc32($b);'),
    create_function('$a,$b', '; return "similar(a,b) = " . similar_text($a, $b, &$p) . "($p%)";')
    );
echo "\nUsing the second array of anonymous functions\n";
process("Twas brilling and the slithy toves", "Twas the night", $garr);
?>

我必须问:为什么要这样做???是
add_shortcode
回调的第二个参数吗?这并不是真正创建具有asker想要的名称的函数,而是创建具有存储在关联数组中的随机唯一名称的函数。在我看来,最好的解决方案是不涉及反射或其他高级功能。但真正的问题是他为什么需要这个@lorenzo-s更新了我的答案,应该是两行代码。请看答案的开头。我的意思是,很好的解决方案,使用短代码(我不知道PHP的特性)。事实上,重读这个问题,我不明白为什么他想要创建一个返回字符串的函数,使用输出缓冲在一个已经返回字符串的函数上包装回音!!!谢谢我之所以这样做似乎有些奇怪,是因为我是一名网页设计师,也是一名有抱负的前端开发人员。@user1106742如果您认为这是正确的答案,请接受它。您不能仅仅粘贴PHP手册注释中的代码,这与用户问题完全无关。只要链接到那个页面就好了。
<?php
function process($var1, $var2, $farr)
{
    foreach ($farr as $f) {
        echo $f($var1, $var2) . "\n";
    }
}

// create a bunch of math functions
$f1 = 'if ($a >=0) {return "b*a^2 = ".$b*sqrt($a);} else {return false;}';
$f2 = "return \"min(b^2+a, a^2,b) = \".min(\$a*\$a+\$b,\$b*\$b+\$a);";
$f3 = 'if ($a > 0 && $b != 0) {return "ln(a)/b = ".log($a)/$b; } else { return false; }';
$farr = array(
    create_function('$x,$y', 'return "some trig: ".(sin($x) + $x*cos($y));'),
    create_function('$x,$y', 'return "a hypotenuse: ".sqrt($x*$x + $y*$y);'),
    create_function('$a,$b', $f1),
    create_function('$a,$b', $f2),
    create_function('$a,$b', $f3)
    );

echo "\nUsing the first array of anonymous functions\n";
echo "parameters: 2.3445, M_PI\n";
process(2.3445, M_PI, $farr);

// now make a bunch of string processing functions
$garr = array(
    create_function('$b,$a', 'if (strncmp($a, $b, 3) == 0) return "** \"$a\" '.
    'and \"$b\"\n** Look the same to me! (looking at the first 3 chars)";'),
    create_function('$a,$b', '; return "CRCs: " . crc32($a) . ", ".crc32($b);'),
    create_function('$a,$b', '; return "similar(a,b) = " . similar_text($a, $b, &$p) . "($p%)";')
    );
echo "\nUsing the second array of anonymous functions\n";
process("Twas brilling and the slithy toves", "Twas the night", $garr);
?>