How can I use PHP closure function like function() use() on PHP 5.2 version?

前端 未结 3 438
一向
一向 2021-01-27 12:48

How can I use PHP closure function like function() use() on PHP 5.2 version as it has no support for anonymous functions?

Currently my code is something like below

相关标签:
3条回答
  • 2021-01-27 13:21

    Something like that should do:

    $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);
    '));
    
    0 讨论(0)
  • 2021-01-27 13:25

    Php supports anonymous functions since 5.3.0, read about it in manual.

    You could use create_function but you should avoid this (for example because of this comment) and it's practically the same as eval... One bad enclosure and you'll make your sources vulnerable. It's also evaluted on runtime, not on compilation time what can decrease performance and may cause fatal error in the middle of included file.

    Rather declare that function somewhere, it'll be more effective.

    0 讨论(0)
  • 2021-01-27 13:39

    I assume you are asking for the 'use' directive due to the early value bindings, right? You could use 'create function' and insert there some static variables with the values you have at the creation time, for example

    $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 讨论(0)
提交回复
热议问题