我想在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()`
可以使用类似下面的其中输出是印刷消息 “你好,世界!”:
function someName($val){
return $val;
}
$functionName = "someName";
echo call_user_func($functionName, "Hello, World!");
注:如果您在使用新版本的PHP,你也可以使用@J.Bruni指出的可加密:
$functionName = "someName";
$functionName(); //also calls `someName()`
我试了两种选择,两种作品都非常有用,谢谢 –
使用帖子旁边的复选标记来选择答案 – jeremy
“可驯化”并不是什么新鲜事。它们可用很长时间。自PHP 4.0.6起,“is_callable”函数可用。事实是,新的“可卡因”文档页面比以前严重得多...我在回答链接后粘贴了这个不愉快的惊喜......我想链接的页面不再存在了! –
call_user_func()解决您的问题!
$function = 'myOwnFunction';
call_user_func($functionname);
,并避免致命的错误,你
function_exists($function);
吧!
是的,这很简单:
$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
核实,如果一个函数/方法之前实际上是调用称它。
这是最好的方法imo。对于这种情况,没有理由使用'call_user_func',尽管你应该使用'function_exists'来检查函数的存在。 –
是的,当然。你当然不需要**'call_user_func'来查询所要求的内容。在几种情况下它可能很有用,但是当然你可以使用一个字符串变量来调用一个函数而不用它。 –
我尝试了两种选择,这两种作品,你和@Nile,真的很有帮助,谢谢 –
你有没有试过看? – andrewsi
'不知道函数的名字'? – xdazz