2017-08-02 18 views
0

私にはわかりませんが、私のコードにどのように影響するかを知りたいと思っています。私が知る限りでは、コードは動作し、すべてがそうであるように見えます。 私はWordPressの設定で作業していますが、WordPressに厳密に関係なく、匿名関数を使用する方法についての誤解であると私には思われます。 しかし、これが状況です。標準のページを作成するいくつかのメソッドを持つクラスがありますが、そのクラスのいくつかのインスタンスに対して繰り返す必要があります。クラスメソッドはページの内容を返し、正しく動作します。 私はwordpressの管理者メニューにこれらのページを追加するために、通常、私は単にそれが空白につながるので、この場合には機能は、代わりにそれをエコーの内容を返します。しかし、php警告:{closure}()の引数2がありません

$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:私は知らない単純に、もう一方のコンテンツをエコーする新しいメソッドを追加するか、コンテンツを返す代わりにそのコンテンツをエコーするパラメータを追加することができます。しかし、私はむしろ問題があればそれが何であるかを理解したいと思う。 、そのエラーメッセージを取り除くために

+0

で「注入された」あなたは同じ変数名を持っている、とあなたは変数でそれらを上書きするので、最後にそれが動作します$ t'と$ function_name' **両方をパラメータとして取得しキャプチャしますか?それはどちらか一方でなければなりません。 –

+0

私はそれが何を意味するのか分かりません。 – DavidTonarini

答えて

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()が何をするかわかりませんが、それは無名関数への引数を渡しているようです同じ名前の$tを、use ($t, $function_name)という名前の匿名関数のレキシカルスコープに追加して上書きします。

基本的に、function ($t, $function_name)の2番目の引数が渡されていないが、なぜあなたは `使用しているuseキーワード

+0

Ahaだから、私は実際には構文を誤解していて、私のコードはちょうど誤って作業していたことが判明した。大変ありがとう、私は何か新しいことを学んだことをうれしく思っています。そして今、この仕事の仕方を正しく理解しています。 – DavidTonarini

+1

これは、最初の引数 'add_submenu_page($ parent_slug、$ title、$ menu_title、 'manage_options'、$ function_name、function($ test)use($ t、$ function_name){ var_dump ($ test); }); ' – blackcat

関連する問題