//php 5 中可以使用 __call() 方法实现方法的重载。
//函数原型为 mixed __call(string name, array arguments)
//mixed 是一个伪类型约定。说明一个参数可以接受多种不同的类型
class A{
protected $v;
public function __construct($v){
$this->v = $v;
}
public function __call($funcname, $paras){
//name为要重载的函数名, arguments 则为调用重载函数时传入的参数所组成的数组,第一个参数在arguments[0]
if($funcname !== 'add') return null;
if(count($paras) == 1) return $this->add1($paras[0]);
if(count($paras) == 2) return $this->add2($paras[0], $paras[1]);
if(count($paras) == 3) return $this->add3($paras[0], $paras[1], $paras[2]);
}
// private function add(){
// echo "shabi/n";
// }
private function add1($v1){
echo "调用add1函数/n";
return $this->v + $v1;
}
private function add2($v1, $v2){
echo "调用add2函数/n";
return $this->v + $v1 + $v2;;
}
private function add3($v1, $v2, $v3){
echo "调用add3函数/n";
return $this->v + $v1 + $v2 + $v3;
}
}
$a = new A(100); $r = $a->add(1); echo $r."/n"; $r = $a->add(1, 2); echo $r."/n"; ?>