我想在PHP中创建一个函数并在不知道函数名称的情况下调用它。
这可能吗?
示例:
<?php
$functionName = "someName";
$this->$functionName();
function someName(){
echo("Print Message");
}
?>
答案 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!");
注意:如果您使用的是较新版本的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);
用它来吧!