我需要能够调用一个函数,但函数名存储在一个变量,这是可能的吗?例句:

function foo ()
{
    //code here
}

function bar ()
{
    //code here
}

$functionName = "foo";
// I need to call the function based on what is $functionName

当前回答

如果有人被谷歌带到这里,因为他们试图在一个类中使用一个方法的变量,下面是一个实际工作的代码示例。以上这些方法都不适用于我的情况。关键的区别在于$c = & new…&$c在call_user_func中传递。

我的具体情况是当实现某人的代码必须与颜色和两个成员方法点亮()和暗()从csscolor.php类。不管出于什么原因,我希望有相同的代码能够调用变亮或变暗,而不是用逻辑选择它。这可能是我固执地不使用if-else或更改调用此方法的代码的结果。

$lightdark="lighten"; // or optionally can be darken
$color="fcc";   // a hex color
$percent=0.15;  
include_once("csscolor.php");
$c = & new CSS_Color($color);
$rtn=call_user_func( array(&$c,$lightdark),$color,$percent);

注意,尝试使用$c->{…不管用。通过阅读php.net页面底部call_user_func上的读者提供的内容,我能够将上述内容拼凑在一起。另外,请注意$params作为数组对我不起作用:

// This doesn't work:
$params=Array($color,$percent);
$rtn=call_user_func( array(&$c,$lightdark),$params);

上述尝试将给出关于该方法期望第二个参数(percent)的警告。

其他回答

如果你在一个对象上下文中试图动态调用一个函数,请尝试如下代码:

$this->{$variable}();

我最喜欢的版本是内联版本:

${"variableName"} = 12;

$className->{"propertyName"};
$className->{"methodName"}();

StaticClass::${"propertyName"};
StaticClass::{"methodName"}();

你也可以把变量或表达式放在括号里!

为了完整起见,你也可以使用eval():

$functionName = "foo()";
eval($functionName);

然而,call_user_func()是正确的方法。

我不知道你为什么要用它,听起来对我来说一点都不好,但如果只有少量的函数,你可以使用if/elseif结构。 我不知道是否有直接的解决办法。

类似的 $foo = "bar"; $test = "foo"; echo $ $测试;

应该返回酒吧,你可以尝试,但我不认为这将工作的功能

如果有人被谷歌带到这里,因为他们试图在一个类中使用一个方法的变量,下面是一个实际工作的代码示例。以上这些方法都不适用于我的情况。关键的区别在于$c = & new…&$c在call_user_func中传递。

我的具体情况是当实现某人的代码必须与颜色和两个成员方法点亮()和暗()从csscolor.php类。不管出于什么原因,我希望有相同的代码能够调用变亮或变暗,而不是用逻辑选择它。这可能是我固执地不使用if-else或更改调用此方法的代码的结果。

$lightdark="lighten"; // or optionally can be darken
$color="fcc";   // a hex color
$percent=0.15;  
include_once("csscolor.php");
$c = & new CSS_Color($color);
$rtn=call_user_func( array(&$c,$lightdark),$color,$percent);

注意,尝试使用$c->{…不管用。通过阅读php.net页面底部call_user_func上的读者提供的内容,我能够将上述内容拼凑在一起。另外,请注意$params作为数组对我不起作用:

// This doesn't work:
$params=Array($color,$percent);
$rtn=call_user_func( array(&$c,$lightdark),$params);

上述尝试将给出关于该方法期望第二个参数(percent)的警告。