我想在 PHP 中创建一个函数并在不知道函数名称的情况下调用它。
这可能吗?
例子:
<?php
$functionName = "someName";
$this->$functionName();
function someName(){
echo("Print Message");
}
?>
我想在 PHP 中创建一个函数并在不知道函数名称的情况下调用它。
这可能吗?
例子:
<?php
$functionName = "someName";
$this->$functionName();
function someName(){
echo("Print Message");
}
?>
看起来像你想要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,您还可以使用 @J.Bruni 指出的可调用对象:
$functionName = "someName";
$functionName(); //also calls `someName()`
是的,这很简单:
$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
在实际调用之前使用该函数来验证函数/方法是否可调用。
call_user_func() 解决您的问题!
$function = 'myOwnFunction';
call_user_func( $functionname );
并且为了避免致命错误,您
function_exists($function);
用它!