PHP - 在没有类的foreach中创建动态函数

时间:2018-03-10 10:17:31

标签: php

我使用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_attribute['attribute_art']variant_1,我需要的功能称为custom_tab_content_variant_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'];
        }
    ];
}

1 个答案:

答案 0 :(得分:1)

这里我不能把它放在评论中。

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){

  }

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