2012-02-14 143 views
0

如何在PHP 5.2版本中使用PHP函數function()use(),因爲它不支持匿名函數?如何在PHP 5.2版本中使用PHP函數(如function()use()?

目前我的代碼是一樣的東西下面

$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

只需使用工具欄上的代碼按鈕(「{}」按鈕)來格式化代碼即可。 – 2012-02-14 18:23:25

+0

可能重複的[是否有可能在PHP 5.2.x中模擬封閉不使用全局?](http://stackoverflow.com/questions/2209327/is-it-possible-to-simulate-closures-in-php- 5-2-x-not-using-globals) – ceejayoz 2012-02-14 18:24:18

回答

1

PHP支持匿名函數自5.3.0開始,請在manual中閱讀。

您可以使用create_function但您應該避免這種情況(例如因爲this comment),它與eval實際上是一樣的......一個不合適的機箱,您將使您的來源易受攻擊。它也是在運行時進行評估的,而不是編譯時間,可能會降低性能,並可能在包含文件的中間造成致命錯誤。

寧可在某處聲明該函數,它會更有效。

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

我個人認爲'create_function'(以及'eval')是「殺死小貓」的php的一個特性。它比在文件中創建函數更慢,效率也更低+在運行時解析它,而不是編譯......我不知道......我只是......你爲什麼要這麼做? – Vyktor 2012-02-14 18:45:32

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); 
'));