方法一:自定义一个方法,根据传入参数的数量,对应到某一个方法中
class Overloading{
public function test()
{
$nums = func_num_args(); //传入参数数量
$args = func_get_args(); //传参数组
switch ($nums) {
case 1:
$this->test1($args[0]);
break;
case 2:
$this->test2($args[0], $args[1]);
break;
default:
throw new Exception("Not Found Action");
break;
}
}
private function test1($arg0)
{
echo __METHOD__;
}
private function test2($arg0, $arg1)
{
echo __METHOD__;
}
}
$obj = new Overloading();
$obj->test(1);
$obj->test(1,2);
方法二:使用__call魔术方法,根据传入参数的数量,回调调用其他一个方法
class Overloading{
//定义魔术方法
public function __call($name, $args)
{
if($name == 'test'){
switch (count($args)) {
case 1:
call_user_func_array([$this,'test1'], $args);
break;
case 2:
call_user_func_array('self::test2', $args);
break;
default:
throw new Exception("Not Found Action");
break;
}
}
}
//静态魔术方法
public static function __callStatic($name, $args)
{
}
private function test1($arg0)
{
echo __METHOD__;
}
private function test2($arg0, $arg1)
{
echo __METHOD__;
}
}
$obj = new Overloading();
$obj->test(1);
$obj->test(1,2);