PHP-在foreach中创建动态函数而不使用类

PHP-在foreach中创建动态函数而不使用类,php,Php,我使用WooCommerce选项卡动态显示有关可用可变产品的选项卡: foreach ($variant_attributes as $variant_id => $variant_attribute) { $tabs[$variant_attribute['attribute_art']] = [ 'title' => $variant_attribute['attribute_art'], 'priority' => 16,

我使用WooCommerce选项卡动态显示有关可用可变产品的选项卡:

foreach ($variant_attributes as $variant_id => $variant_attribute) {
    $tabs[$variant_attribute['attribute_art']] = [
        'title'    => $variant_attribute['attribute_art'],
        'priority' => 16,
        'callback' => 'custom_tab_content_'.$variant_attribute['attribute_art']
    ];
}
由于Woocommerce选项卡需要回调来显示选项卡中的数据,因此我需要像在本例中尝试的那样动态创建函数,但这当然不起作用

如何在这里提供在foreach循环中创建的回调

因此,例如,如果
$variant\u attribute['attribute\u art']
variant\u 1
,则我需要的函数称为
custom\u tab\u content\u variant\u 1

谢谢你的帮助

编辑:

解决办法是:

foreach ($variant_attributes as $variant_id => $variant_attribute) {

    $tabs[$variant_attribute['attribute_art']] = [
        'title'    => $variant_attribute['attribute_art'],
        'priority' => 16,
        'variant_id' => $variant_id,
        'callback' => function($arg, $params) {

            echo $params['variant_id'];
        }
    ];
}

在这里,我不能把它放在评论里

foreach ($variant_attributes as $variant_id => $variant_attribute) {
    $tabs[$variant_attribute['attribute_art']] = [
        'title'    => $variant_attribute['attribute_art'],
        'priority' => 16,
        'callback' => function($arg1){
               //do stuff
         }
    ];
}
当然,如果功能不同,那么您别无选择,只能单独编写它们

然而,即使不是这样,你也应该用传统的方式来做

如果是在课堂上

 class foo{
     public function register(){
         foreach ($variant_attributes as $variant_id => $variant_attribute) {
             $tabs[$variant_attribute['attribute_art']] = [
                'title'    => $variant_attribute['attribute_art'],
                'priority' => 16,
                'callback' => [$this, 'action']
            ];
         }
     }

     public function action($arg1){

     }
  }
请参见第一个创建(n)个相同的函数,第二个创建1个函数/方法使用它(n)次

或者,您可以手工编写它们,并像您一样在循环中分配它们。不能/不应该在循环中创建函数

  function custom_tab_content_variant_1($arg1){

  }

最后一种方法是,created 1 function使用它一次,或者您可以手动创建(n)个函数并每次使用它们一次。

Closures<代码>函数($arg){…}也就是说,如果它们具有相同的功能,那么最好创建一个函数并在所有函数中引用它。如果不是,那就不要再懒惰了。@ArtisticPhoenix?什么意思?这对创建动态函数有何帮助?
我如何在这里提供在foreach循环中创建的回调
查看示例#2谢谢!这有点傻,因为我以前尝试过匿名函数,但没有成功。现在它不知怎么起作用了。也许我把事情搞砸了。如果我的函数中有$arg1,它会显示标题。我是否有机会在匿名函数中获取$variant_id?也许,您可以始终执行
print_r(func_get_args())以查看。。。。。虽然我会把它们放在像
函数($arg1,$arg2){…}
等中,但我还是找到了答案。我只需要将它包含在$tabs数组中。谢谢你的帮助!祝您有个美好的一天!