PHP-在foreach中创建动态函数而不使用类
我使用WooCommerce选项卡动态显示有关可用可变产品的选项卡: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,
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数组中。谢谢你的帮助!祝您有个美好的一天!