如何使用从字符串变量生成的函数名称来调用函数

时间:2010-04-07 06:21:17

标签: php

在自动化某些代码的过程中,我希望根据字符串的内容调用一个函数。

例如,我有一个变量$somevar,它被设置为字符串“This”。现在我想运行一个函数doThis();

所以,我希望我能写do.$somevar($var,$var2)。我希望它运行doThis($var1,$var2)

这可能吗?

6 个答案:

答案 0 :(得分:4)

您可以使用call_user_func来完成此任务。

call_user_func("do" . $somevar, $var1, $var2);

您还可以使用is_callable检查错误情况。

if (is_callable("do" . $somevar)) {
    call_user_func("do" . $somevar, $var1, $var2);
} else {
    echo "Function do" . $somevar . " doesn't exist.";
}

答案 1 :(得分:3)

我认为你不能那样做,但你可以这样做:

call_user_func('do'. $somevar, $var, $var2);

$func = 'do' . $somevar;
$func($var, $var2);

答案 2 :(得分:1)

这在php中完全合法

$myVar = 'This';

$method = 'do'.$myVar; // = doThis
$class  = new MyClass();
$class->$method($var1, $var2, ...); // executes MyClass->doThis();

答案 3 :(得分:1)

$fname="do$somevar";
$fname();

但在使用之前你应该三思而行。

答案 4 :(得分:0)

在php中你使用 - >代替 。 这将有效:

$foo = new someObject;
$somevar = 'function_name';
$foo->$somevar('x');

答案 5 :(得分:0)

检查call_user_func或call_user_func_array

class myclass {
    static function say_hello()
    {
        echo "Hello!\n";
    }
}

$classname = "myclass";

call_user_func(array($classname, 'say_hello'));
call_user_func($classname .'::say_hello'); // As of 5.2.3