在PHP动态函数名(Dynamic function name in php)

2019-08-17 03:00发布

我想简化WordPress的“自定义文章类型”的创作,因为它是单调乏味的经历相同的脚本和手动遍地改变所有的自定义后类型名称实例。

这是很简单的通过创建包含CPT名称的变量来实现,并在任何地方使用它,它是必要的。 这样一来,我所要做的就是声明在脚本的开头的变量和应采取其他的事情。

唯一的问题是,为了使其工作,我还需要在脚本中的每个函数前面的前缀CPT名和似乎在功能名称中使用的变量是不容易的,甚至在PHP建议。

所以,我怎么能解决这个问题?

这是下面一个例子来弄清楚:

$prefix = 'news';

function news_custom_type_init()
{
    global $prefix;

    register_post_type($prefix, array(
    'labels' => array(
          'name' => $prefix,
          'singular_label' => $prefix,
          'add_new' => 'Add',
          ...
        ));

        register_taxonomy_for_object_type( 'category', $prefix );
}
add_action('init', $prefix.'_custom_type_init');

这几乎是很好,如果我能动态地为了不都写在它前面的字的“新闻”,而是用“$前缀”,而不是重命名功能,可以标准化。

这可能是好的,但只是不工作:

$prefix = 'news';

$functionName= $prefix."_custom_type_init";

function $functionName()
{
    global $prefix;

    register_post_type($prefix, array(
    'labels' => array(
          'name' => $prefix,
          'singular_label' => $prefix,
          'add_new' => 'Add',
          ...
        ));

        register_taxonomy_for_object_type( 'category', $prefix );
}
add_action('init', $prefix.'_custom_type_init');

不必手动名的功能还挺打败我尝试的初衷(特别是当该脚本嵌入几十种功能,如这一个)。

什么是做到这一点的最好方法是什么?

PS:我用Google搜索和“stackoverflowed”了很多关于这一点,但没有发现适合我的需要,并不会产生WordPress的错误消息,任何可行的解决方案。

谢谢。

Answer 1:

很简单,这里有一个类似的文档片断形成项目:

$function = $prefix . '_custom_type_init';
if(function_exists($function)) {
  $function();
}


Answer 2:

这是一个古老的线程,但简单地使用匿名函数:

add_action('init', function() use($args) {
    //...
});

那么有没有必要宣布如此多的功能。



Answer 3:

编辑(2017-04):匿名函数(正确实施)都去了,看看答案由大卫Vielhuber的方式。

这个答案是不明智的 ,因为是涉及代码作为字符串的任何办法,因为这个邀请(除其他事项外)级联。


林不知道,如果它是建议使用,或者如果它可以帮助你,但是PHP允许您创建“匿名”功能:

function generateFunction ($prefix) {
    $funcname = create_function(
        '/* comma separated args here */', 
        '/* insert code as string here, using $prefix as you please */'
    );
    return $funcname;
}

$func= generateFunction ("news_custom_type_init");
$func(); // runs generated function

我假设ADD_ACTION只是叫你通过什么功能。

http://php.net/manual/en/function.create-function.php

注:create_function不会跟你想要的名称返回的功能,但该功能的内容将是你的控制之下,该函数的真实名称并不重要。



Answer 4:

我想你可以使用

runkit_function_add

http://php.net/manual/pl/function.runkit-function-add.php

一个其它可用的方法是使用eval()



Answer 5:

这个职位是旧的,但PHP 7可能会解决这个问题。

尝试:

$prefix = 'news';

$functionName = $prefix . "_custom_type_init";

${$functionName} = function() use ($prefix) {

    register_post_type($prefix, array(
        'labels' => array(
            'name' => $prefix,
            'singular_label' => $prefix,
            'add_new' => 'Add'
        )
    );

    register_taxonomy_for_object_type( 'category', $prefix );
};

add_action('init', '$' . $functionName);

我认为它应该为WordPress工作。



文章来源: Dynamic function name in php