有的时候,能够调用可变参数的同一个方法会非常方便。PHP能够定义带默认值的可选参数使这一做法成为可能。
可以在php5中用__call()实现这种方法重载。下面来看一个示例。假设要用重载行为,那么要将其放到抽象父类中。
- abstract class OverloadableObject{
- function __call($name, $args){
- $method = $name."_".count($args);
- if(!method_exists($this,$method)){
- throw new Exception("Call to undefined method".get_class($this)."::$method");
- }
- return call_user_func_array(array($this,$method),$args);
- }
- }
- $method = $name."_".count($args);
现在,如果要使用一个名为multiply的重载方法,可以使用两个或三个参数来调用它,并在每种情况下进行相应操作,可以分别用两个方法:multiply_2和multiply_3
- class Multiplier extends OverloadableObject{
- function multiply_2($one,$two){
- return $one*$two;
- }
- function multiply_3($one,$two,$three){
- return $one*$two*$three;
- }
- }
$multi = new Multiplier;
echo $multi->multiply(5,6)."\n";
echo $multi->multiply(5,6,7)."\n"; (fblww-0309)