在不知道名字的情况下调用函数

时间:2012-09-15 15:12:26

标签: php

我想在PHP中创建一个函数并在不知道函数名称的情况下调用它。

这可能吗?

示例:

<?php

     $functionName = "someName";
     $this->$functionName();
     function someName(){
         echo("Print Message");
     }
?>

3 个答案:

答案 0 :(得分:3)

看起来你想要call_user_func()

$functionName = "someName";
call_user_func($functionName); //calls `someName()`

可以像下面这样使用,输出是打印的消息“Hello,World!”:

function someName($val){
    return $val;
}

$functionName = "someName";
echo call_user_func($functionName, "Hello, World!");

http://ideone.com/Kw5jp

注意:如果您使用的是较新版本的PHP,您也可以使用calgbles @ J.Bruni指出:

$functionName = "someName";
$functionName(); //also calls `someName()`

答案 1 :(得分:3)

是的,很简单:

$functionName();

然而,你有其他几个选择,允许更复杂的东西。请检查:

http://php.net/manual/en/language.types.callable.php

一系列例子:

function test() { echo 'hello 1'; }
class Something { function test() { echo 'hello 2'; } }
class Other { static function test() { echo 'hello 3'; } }

$functionName = 'test';
$object = new Something();
$className = 'Other';

// three ways to call function "test", showing how to pass parameters
$functionName($param1, $param2);
call_user_func($functionName, $param1, $param2);
call_user_func_array($functionName, array($param1, $param2));

// two ways to call "Something::test"
$object->$functionName();
call_user_func(array($object, $functionName));

// a way to call "Other::test"
call_user_func(array($className, $functionName));

重要提示:您需要在强调之前声明功能。 (在你的问题中,你宣布之后>试图调用它。这不起作用。)

为避免错误,您可以使用函数is_callable来验证函数/方法在实际调用之前是否可调用。

答案 2 :(得分:2)

call_user_func()解决了您的问题!

$function = 'myOwnFunction';
call_user_func( $functionname );

并且为了避免致命错误,你

function_exists($function);
用它来吧!