1

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

这可能吗?

例子:

<?php

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

3 回答 3

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,您还可以使用 @J.Bruni 指出的可调用对象:

$functionName = "someName";
$functionName(); //also calls `someName()`
于 2012-09-15T15:14:34.297 回答
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在实际调用之前使用该函数来验证函数/方法是否可调用。

于 2012-09-15T15:15:48.763 回答
2

call_user_func() 解决您的问题!

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

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

function_exists($function);

用它!

于 2012-09-15T15:15:38.343 回答