使用变量名称定义函数?

时间:2010-12-04 20:00:31

标签: php wordpress function

我需要为包含短代码的Wordpress创建一个列系统,这不是问题,但我试图用更少的代码来实现它。

我有一个包含所需数据的数组,我遍历它,创建一个唯一命名的函数并将其设置为短代码函数。第三步是个谜。如何从变量创建函数。

以下是一个例子,它应该如何完成:

$data[] = "first";
$data[] = "second";
foreach($data as $key => $value) {
    function $value($atts,$content) {
        return '<div class="'.$value.'">'.$content.'</div>';
    }
    add_shortcode($value,$value);
}

然而,似乎不可能让它在PHP中像那样工作。有没有办法使这项工作,因为我不想写所有(相同)功能分开。我可以使短代码类似[col first]text[/col],但客户希望每个代码都有不同的名称。

2 个答案:

答案 0 :(得分:5)

您可以使用double dollar语法将变量的值用作变量标识符

示例:

$variable = "test";
$$variable = "value of test"

echo $test; //or echo $$variable;

我从未尝试过,但你想尝试一下:

foreach($data as $key => $value)
{
    function $$value($atts,$content)
    {
    }
    add_shortcode($value,$value);
}

或类似create_function

的功能

如果您使用PHP 5.3或更高版本,那么您可以这样做:

$$value = function()
{

}

应该可以正常工作

答案 1 :(得分:0)

我不确定WP如何调用这些函数,但是如果它使用call_user_func那么你可能会因使用虚拟方法的对象而作弊:

class fake_functions {
    function __call($name, $params) {
        return '<div class="'.$name.'">'.$params[1].'</div>';
    }
}

$obj = new fake_functions();
foreach ($data as $value) {
    add_shortcode($value, array($obj,$value));
}