可能重复:
Use a variable to define a PHP function
Use Variable as Function Name in PHP
我想执行条件函数调用,但我不一定知道函数是什么,所以这将是一个很长的开关。
例如;
$userSelection = "calculator"; /* or "stocks" or whatever widget */
$widget->get_widget($userSelection);
public function __construct($userSelection){
/* pseudo code */
call function $userSelection();
}
public function calculator(){
/* Get Calculator */
}
答案 0 :(得分:1)
当然有。此功能称为variable functions:
$functionName = "strlen";
$length = $$functionName("Hello world!");
$$var(...)
语法很方便,但它只适用于自由函数。如果您想以这种方式调用类方法,则需要使用call_user_func
或call_user_func_array
(这些函数也可以处理“自由函数”情况)。
答案 1 :(得分:0)
查看call-user-func函数。这允许您调用另一个函数,例如
call_user_func('calculator')
答案 2 :(得分:0)
call_user_func($userSelection);
答案 3 :(得分:0)
看看这个php函数:
call_user_func():http://php.net/manual/de/function.call-user-func.php
call_user_func_array():http://www.php.net/manual/de/function.call-user-func-array.php
create_function():http://www.php.net/manual/de/function.create-function.php
还有一种直接(虽然难看)的执行语法:
function some_func(args) {...}
$function_name='some_func';
$$function_name(args2);
答案 4 :(得分:0)
您可以使用call_user_func()
,例如:
$userSelection = "calculator";
call_user_func($userSelection[, $param1, $param2, ...]);
call_user_func_array($userSelection, $params);
答案 5 :(得分:0)
如果这就是你的意思,这很简单。
function calculator() {
echo 'foo';
}
$userSelection = "calculator";
if (function_exists($userSelection)) {
$userSelection();
}
或者在您的示例中的类中:
class widget {
public function __construct($userSelection) {
echo 'constructed widget<br>';
if (function_exists($userSelection)) {
$this->$userSelection();
}
}
public function calculator() {
echo 'bar';
}
}
$userSelection = "calculator";
$widget = new widget($userSelection);
当函数是类的一部分时,或者来自类外部。
class widget {
public function calculator() {
echo 'bar';
}
}
$widget = new widget();
$userSelection = "calculator";
$widget->$userSelection();
我会使用if / else语句来确定要调用的函数,以确保只执行有效的函数(您是否清理了用户选择,或者只是从$_POST
获取它?后者将是一个非常糟糕的主意)。
答案 6 :(得分:0)
如果它只是你之后的一个功能,那么使用它可以解决你的问题
$function = "echo";
$$function "fooBar";
如果它是一个类方法,你想保持灵活使用magic method __call(),这将允许你使用未预定义的方法名称。
在对象上下文中调用不可访问的方法时会触发 __call()
。
即
class Foo {
public function __call($name, $arguments) {
echo $name;
}
}
$foo = new Foo();
$foo->bar(); // will echo "bar"
答案 7 :(得分:0)
PHP内置函数'eval'可以做任何事情,但要注意注入。
$var = "somefunction";
eval("$var();");
答案 8 :(得分:0)
您可以执行以下操作:
$var = 'abc';
switch ($var) {
case 'abc':
$result = $var('test param');
echo $result;
break;
default :
echo 'default';
break;
}
function abc($data) {
return $data;
}