PHP动态调用类的方法

时间:2014-05-23 13:25:31

标签: php methods call

class Test {

    function index($method, $params) {

        if (!method_exists($this, $method)) { 
            $result = 'method does not exist!';
        }
        else {
            switch ($method) {
                case 'add':
                    $result = $this->add($params[0], $params[1], $params[2]);
                break;
                case 'sub':
                    $result = $this->sub($params[0], $params[1]);
                break;
                default:
                    $result = 'no method selected!';
                break;
            }
        }       
        return $result;

    }

    public function add($n1, $n2, $n3) {
        return $n1 + $n2;
    }

    public function sub($n1, $n2) {
        return $n1 - $n2;
    }

}

如何以其他方式调用方法。我不想使用switch,因为当我添加新方法时,我必须将它添加到切换中。我想避免这种情况。

问:如何动态地从类中调用方法?

我的想法:

if(!function_exists($method)){
    $result = 'function not exist!';
}
else {
    $result = call_user_func_array($method, $params);
}  

2 个答案:

答案 0 :(得分:1)

嗯,我错了......

您应该用以下代码替换开关:

call_user_func_array(array($this, $method), $params);

答案 1 :(得分:1)

嗯,你可以这样做,

function index($method, $params) {

    if (!method_exists($this, $method)) { 
        $result = 'method does not exist!';
    } else {

        $result = call_user_func_array(array($this, $method), $params);
       }
    }

    return $result;
}