PHP / Wordpress - 将变量传递给create_function()

时间:2010-09-02 22:18:18

标签: php wordpress variables function

如何将变量传递给create_function()?

我有这样的事情:

function my_hook_function(){
  $var = 10;
  apply_filters('hook', $var);
  return $var;
}


$variable = 5;
$function = create_function('', 'return $variable;');

add_filter('hook', $function); 

echo my_hook_function();

但它不起作用:( 从理论上讲,输出应为5

add_filter()是一个wordpress功能,允许你改变周围的东西:)

4 个答案:

答案 0 :(得分:3)

阅读create_function手册,将$variable传递给该函数的用法如下:

$variable = 3434;
$function = create_function('$v', 'return $v;');

echo $function($variable); 

修改

$variable调用中更改了create_function,以使其更清楚正确使用并避免混淆。

<强>更新

鉴于下面的评论,这是一个更新版本:

$variable = 3434;
$function = create_function('$v', 'return $v;');

function myTest($function, $var) {
    echo $function($var);
}

myTest($function, $variable); // should echo 3434

不确定这是否是您想要的,在您展示您正在使用的实际情况之前,我将不再进一步猜测。

更新2

进行一些研究,是否有理由不以这种方式使用它:

add_filter('something', create_function('$v', 'return $v;'));

从我能找到的应该有效......

答案 1 :(得分:3)

$outsideVarName = 3434;
$function = create_function('$insideFunctionVarName', 'return $insideFunctionVarName;');
echo $function($outsideVarName);

答案 2 :(得分:3)

这里有两个问题。第一个是你需要告诉php哪些参数传递给'created'函数,或者将它们作为全局内部引用。第二个是你期望$ var被创建的函数修改,但你没有传递它作为引用。创建的函数只返回新变量,而您不做任何操作。

function my_hook_function(){
  $var = 10;
  $var = apply_filters('hook', $var);
  return $var;
}

/* This will return 5 by dividing the passed value by 2 and returning the result */
$function = create_function('$variable', 'return $variable/2;');    
add_filter('hook', $function);
echo my_hook_function();

/* This will return 5 by referencing the global $variable */
$variable = 5;
$function = create_function('', 'global $variable; return $variable;');
add_filter('hook', $function);
echo my_hook_function();

请注意,如果您完全按照这样运行此代码,则过滤器的两个将被添加到“hook”钩子中。

答案 3 :(得分:1)

我认为你真正想要的是

$function = create_function('', "return $variable;");

$function = create_function('', 'return ' . $variable . ';');

即。您希望在创建时将变量的值捕获到函数中。由于转换为字符串的数字与其源表示相同,因此只需将其插入到函数的源中就足够了。对于字符串和数组,一些引用是必要的。