我创建这个方法是为了让它不仅在构造函数中使用,而且在方法中使用:
我的构造函数:
function __construct() {
$paramsNumber=func_num_args();
if($paramsNumber==0){
//do something
}else{
$this->overload('__construct',func_get_args());
}
}
我的doSomething方法:
public function doSomething() {
$paramsNumber=func_num_args();
if($paramsNumber==0){
//do something
}else{
$this->overload('doSomething',func_get_args());
}
}
两者都使用这个简单的方法:
public function overloadMethod($methodName,$params){
$paramsNumber=sizeof($params);
//methodName1(), methodName2()...
$methodNameNumber =$methodName.$paramsNumber;
if (method_exists($this,$methodNameNumber)) {
call_user_func_array(array($this,$methodNameNumber),$params);
}
}
所以你可以声明
__construct1($arg1), __construct2($arg1,$arg2)...
or
methodName1($arg1), methodName2($arg1,$arg2)...
等等。
使用时:
$myObject = new MyClass($arg1, $arg2,..., $argN);
它将调用__constructN,在那里你定义了N个参数
然后
$myObject -> doSomething($arg1, $arg2,..), argM美元)
它会调用doSomethingM,在这里你定义了M个参数;