1

これを説明するのは少し難しいですが、最善を尽くします。クロージャのインスタンスを作成する最良の方法を見つけようとしています。以下は、クロージャーを作成してアクセスする方法の例です。

$myvar->parse('var1, var2', function () {
  //my code
});

次に、コンマを分解して文字列をループし、そのように配列に入れます。

$array = array();
$array['var1'] = closure();
$array['var2'] = closure();

後で私のコードでcall_user_func、関数を実行するために使用します。

今、私が抱えている問題は、アクセス$array['var1']すると問題なくクロージャーが呼び出されることです。

しかし、アクセス$array['var2']しても何も起こりません。しばらくの間、さまざまなウェブサイトを見てきましたが、あまり運がありませんでした。ポインターを使用する必要がありますか (成功せずに試行されました)、または何らかの方法で新しいインスタンスを作成する必要がありますか?

現在、サーバー上のphp 5.3にしかアクセスできないため、5.4のすばらしいものは使用できません:(

フィードバックやアドバイスをいただければ幸いです。

4

2 に答える 2

1
  $yourcall = function () {
    //code
  };

  $array['var1'] = $yourcall;
  $array['var2'] = $yourcall;

それらの値にクロージャを割り当てます。でも:

  $array['var1'] = $yourcall();
  $array['var2'] = $yourcall();

あなたが持っているように見えるように、そのクロージャを呼び出した結果を配列アイテムに割り当てます。

解析関数(配列ではなく文字列を使用するのはなぜですか)では、次のことが必要だと思います。

  function parse($string,$closure){
      $array = array();
      foreach(explode(',',$string) as $key) $array[$key] = $closure;
      return $array;
  }
于 2012-06-26T22:50:16.987 に答える
0

はい、あなたの質問は明確ではありません。あなたはそれを知っていたのに、なぜもっとよく説明しなかったのだろうか。

とにかく、内部に保存されているクロージャーを実行する必要がある場合は、$array['var2']次のようなコードを具体的に記述する必要があります。

$array['var2'] = function(){
//> Code
};

それが唯一の方法です

コードを推測すると、関数の解析は次のようになります。

function parse($keys,$func) {
 $array = array();
 foreach(explode(',',$keys) as $v) {
   $array[trim($v)] = $func;  //> trim important here!
 }
}

忘れている可能性が高いtrim($v)

于 2012-06-26T22:46:07.260 に答える