2012-02-14 4 views
0

function()use()のようなPHPクロージャー関数は、匿名関数をサポートしていないので、PHP 5.2版でどのように使用できますか?PHP 5.2のバージョンでfunction()use()のようなPHPクロージャー関数を使用するにはどうしたらいいですか?

現在、私のコードは

$this->init(function() use($taxonomy_name, $plural, $post_type_name, $options) 
{ 
    // Override defaults with user provided options 

    $options = array_merge(
     array(
      "hierarchical" => false, 
      "label" => $taxonomy_name, 
      "singular_label" => $plural, 
      "show_ui" => true, 
      "query_var" => true, 
      "rewrite" => array("slug" => strtolower($taxonomy_name)) 
     ), $options 
    ); 

     // name of taxonomy, associated post type, options 
     register_taxonomy(strtolower($taxonomy_name), $post_type_name, $options); 
}); 
+0

ツールバーのコードボタン( '{}')を使用してコードをフォーマットしてください。 –

+0

可能な複製[PHP 5.2.xでクロージャをシミュレートすることは可能ですか?グローバルを使用していませんか?](http://stackoverflow.com/questions/2209327/is-it-possible-to-simulate-closures-in-php- 5-2-x-not-use-globals) – ceejayoz

答えて

1

PHPは無名関数をサポートしています5.3.0以降はmanualで読んでください。

create_functionを使用することができますが、これは避けてください(例:this commentなど)。実際にはevalと同じです...悪いエンクロージャー1つで、ソースを脆弱にします。また、実行時に評価され、コンパイル時ではなく、パフォーマンスを低下させる可能性があり、インクルードファイルの途中で致命的なエラーを引き起こす可能性があります。

代わりにその関数をどこかに宣言すると、より効果的になります。

1

以下のようなものです私は右、あなたが原因の早期値バインディングに「使用」ディレクティブを求めていると仮定しますか?あなたは「関数を作成する」と作成時にそこにあなたが持っている値を持ついくつかの静的変数を挿入し、例えばそのような

$code = ' 

static $taxonomy_name = "'.$taxonomy_name.'"; 
static $plural = "'.$plural.'"; 
static $post_type_name = "'.$post_type_name.'"; 
static $options = json_decode("'.json_encode($options).'"); 

$options = array_merge(
    array(
     "hierarchical" => false, 
     "label" => $taxonomy_name, 
     "singular_label" => $plural, 
     "show_ui" => true, 
     "query_var" => true, 
     "rewrite" => array("slug" => strtolower($taxonomy_name)) 
    ), 
    $options 
); 

// name of taxonomy, associated post type, options 
register_taxonomy(strtolower($taxonomy_name), $post_type_name, $options); 
      '; 

$func = create_function('', $code); 
+0

私は個人的には、「eval」とともに「create_function」と呼ばれるphpの「子猫を殺す」機能の1つと考えています。それは、ファイルのどこかに関数を作成するよりも遅く、効率的ではありません。コンパイルではなく実行時に解析されます...わかりません...私はちょうど...なぜあなたはそれをしますか? – Vyktor

0

何かが何をすべき使用することができ :

$this->init(create_function('',' 
    $taxonomy_name = '.var_export($taxonomy_name,TRUE).'; 
    $plural = '.var_export($plural,TRUE).'; 
    $post_type_name = '.var_export($post_type_name,TRUE).'; 
    $options = '.var_export($options,TRUE).'; 

    $options = array_merge(
     array(
      "hierarchical" => false, 
      "label" => $taxonomy_name, 
      "singular_label" => $plural, 
      "show_ui" => true, 
      "query_var" => true, 
      "rewrite" => array("slug" => strtolower($taxonomy_name)) 
     ), $options 
    ); 

     // name of taxonomy, associated post type, options 
     register_taxonomy(strtolower($taxonomy_name), $post_type_name, $options); 
')); 
関連する問題