Laravel中的方法重载无法正常工作

时间:2019-04-04 18:07:45

标签: php laravel-5

我正在尝试在php中重载我的方法,效果很好。但是,当我试图在我的laravel项目之一中执行相同的操作时,则看不到该重载函数的输出。

class MyClass {
    public function __call($name, $args) {

        switch ($name) {
            case 'funcOne':
                switch (count($args)) {
                    case 1:
                        return call_user_func_array(array($this, 'funcOneWithOneArg'), $args);
                    case 3:
                        return call_user_func_array(array($this, 'funcOneWithThreeArgs'), $args);
                 }
            case 'anotherFunc':
                switch (count($args)) {
                    case 0:
                        return $this->anotherFuncWithNoArgs();
                    case 5:
                        return call_user_func_array(array($this, 'anotherFuncWithMoreArgs'), $args);
                }
        }
    }

    protected function funcOneWithOneArg($a) {
        print($a);
    }

    protected function funcOneWithThreeArgs($a, $b, $c) {
        print $a." ".$b." ".$c;
    }

    protected function anotherFuncWithNoArgs() {
        print "Nothing";
    }

    protected function anotherFuncWithMoreArgs($a, $b, $c, $d, $e) {
        print $a." ".$b." ".$c." ".$d." ".$e;
    }
}
$s = new MyClass; 
$s->anotherFunc(1, 2, 3, 4, 5);

但是当我尝试像下面一样做时,我没有得到任何输出::

在我的APIModel.php中::

public function __call($functionName, $arguments)
    {
        // TODO: Implement __call() method.
        switch ($functionName){
            case 'executeRestAPI':
                switch (count($arguments)){
                    case 3:
                        dd("aa");
                        return call_user_func(array($this, 'executeRestAPIWithThree'), $arguments);
                    case 4:
                        return call_user_func(array($this, 'executeRestAPIWithFour'), $arguments);
                }
        }
    }

    protected function executeRestAPIWithThree($methodType, $request = array(), $referenceID = null){
        dd(12);
        if (isset($referenceID))
            $this->apiEntity = $this->apiEntity."/".$referenceID;

        $response = $this->httpClient->request($methodType,$this->apiEntity, ['query' => $request]);
        dd($response);
        return $response;
    }

现在我正在从另一个类中调用该方法::

public function results(Request $request){
        $params = $request->all();
        unset($params['_token']);
        $absModel = new AbstractAPIModel('ssbsect');
        $absModel->executeRestAPI("GET", $params);

在这里,我没有任何输出。甚至我尝试打印“ 12”来检查此功能是否正在调用。但是我没有找到任何成功。

1 个答案:

答案 0 :(得分:0)

$absModel->executeRestAPI("GET", $params);

您要传递2个参数,因此您的切换大小写将永远不匹配任何内容...

尝试:

call_user_func_array([$absModel, 'executeRestAPI'], array_merge(['GET'], $params));