我正在尝试在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”来检查此功能是否正在调用。但是我没有找到任何成功。
答案 0 :(得分:0)
$absModel->executeRestAPI("GET", $params);
您要传递2个参数,因此您的切换大小写将永远不匹配任何内容...
尝试:
call_user_func_array([$absModel, 'executeRestAPI'], array_merge(['GET'], $params));