在PHP中可以将变量作为函数调用吗?

时间:2012-08-01 10:32:35

标签: php function variables

  

可能重复:
  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 */
}

9 个答案:

答案 0 :(得分:1)

当然有。此功能称为variable functions

$functionName = "strlen";
$length = $$functionName("Hello world!");

$$var(...)语法很方便,但它只适用于自由函数。如果您想以这种方式调用类方法,则需要使用call_user_funccall_user_func_array(这些函数也可以处理“自由函数”情况)。

答案 1 :(得分:0)

查看call-user-func函数。这允许您调用另一个函数,例如

call_user_func('calculator')

答案 2 :(得分:0)

答案 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();");

http://php.net/manual/en/function.eval.php

答案 8 :(得分:0)

您可以执行以下操作:

$var = 'abc';

switch ($var) {
  case 'abc':
    $result = $var('test param');
    echo $result;
  break;
 default :
    echo 'default';
 break;
}

function abc($data) {
  return $data;
}