php警告:{closure}()缺少参数2

时间:2017-08-02 12:25:36

标签: php wordpress

我遇到了一个我不理解的警告,我想知道这可能会影响我的代码。据我所知,代码工作,一切看起来应该如此。 我正在使用WordPress设置,但在我看来,这个问题是对如何使用匿名函数的误解,而不是与WordPress严格相关。 但是,情况就是如此。我有一个类,有几个方法创建标准页面,我需要重复该类的几个实例。类方法返回页面的内容并且它们正常工作。 我想将这些页面添加到wordpress管理菜单中,通常我只需要调用函数

 $t = new My_Class();
 //the method of the class that generates the content 
 $function_name = "foo";
 add_submenu_page( $parent_slug,  $title, $menu_title , 'manage_options', $function_name, array( $t, $function_name) ); 

但是,在这种情况下,函数返回内容而不是回显内容,因此会导致空白页面。所以我尝试了这个

 add_submenu_page( $parent_slug,  $title, $menu_title , 'manage_options', $function_name, function ($t, $function_name ) use ($t, $function_name) {
        echo $t->$function_name();
    } );    

正如我所说,这有效,但它产生了警告,它让我想知道我是做错了什么,或者我是否误解了代码在做什么(因此可能在将来导致不必要的行为)。

PS:我知道我可以简单地添加一个回显另一个内容的新方法,或添加一个参数来回显内容而不是返回它。但是,我宁愿明白问题是什么,如果有的话。

1 个答案:

答案 0 :(得分:1)

要摆脱错误消息,请执行此操作

 add_submenu_page( $parent_slug,  $title, $menu_title , 'manage_options', $function_name, function () use ($t, $function_name) {
    echo $t->$function_name();
}); 

我不熟悉WP,所以我不知道add_submenu_page()做了什么,但似乎它将一个参数传递给匿名函数,你通过添加相同名称{{{ 1}}到$t的匿名函数词法范围。

基本上,use ($t, $function_name)的第二个参数没有被传递,但最终它有效,因为你有相同的变量名,并用变量'注入'覆盖它们。使用function ($t, $function_name)关键字