根据给定参数的值调用不同的函数

时间:2016-02-11 08:34:10

标签: php

这个问题实际上非常简单,但有些难以解释,但我会尽我所能。

假设以下功能和类:

somethingsomething.php

function do_something($a, $b, $whatToDo) {
    $value = someRandomClass::doThis();
    return $a + $b * $value;
}

someRandomClass.class.php

class someRandomClass {
    public static doThis() {
        return $this->valueThis;
    }
    public static doThat() {
        return $this->valueThat;
    }
    public static doSomethingElse() {
        return $this->valueSomethingElse;
    }
}

所以,我们有一个功能可以做某事。它有3个参数:

$a =一个整数

$b =也是一个整数

$whatToDo。 =一个字符串,thisthatsomethingElse

如您所见,do_something()中的计算需要一个通过类中3个函数之一接收的值。但是调用的函数应该由$whatToDo中的值定义。当然,我可以创建一个if或switch语句,如下所示:

function do_something($a, $b, $whatToDo) {
    if($whatToDo === "this") {
        $value = someRandomClass::doThis();
    } elseif ($whatToDo === "that") { 
        $value = someRandomClass::doThat();
    } elseif ($whatToDo === "somethingElse") {
        $value = someRandomClass::doSomethingElse();
    }
    return $a + $b * $value;
}

但这看起来很糟糕,如果我得到更多(实际代码最多可以有41个不同的“$whatToDo”),那真的很难读。

我想知道是否有办法使用变量来“创建”一个函数名并调用该函数,如下所示:

function do_something($a, $b, $whatToDo) {
    $value = someRandomClass:: "do" . $whatToDo ."()";
    return $a + $b * $value;
}

因此如果$whatToDo包含“this”,则会调用doThis()

这可能是必要的吗?

2 个答案:

答案 0 :(得分:4)

您可以使用变量函数进行此类操作:

 $fn = "do".$whatToDo."()"; // create a string with the function name
 $value = someRandomClass::$fn; // call it

更多信息:

http://php.net/manual/es/functions.variable-functions.php

答案 1 :(得分:1)

你可以使用变量'调用函数的值,如

function a(){ echo "Testing"; }
$b="a";
$b();

这会回应Testing