我创建了这个方法,不仅可以在构造函数中使用它,还可以在方法中使用它:
我的构造函数:
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)...
或者
methodName1($arg1), methodName2($arg1,$arg2)...
等等 :)
使用时:
$myObject = new MyClass($arg1, $arg2,..., $argN);
它将调用__constructN
,您在其中定义N
args
然后 $myObject -> doSomething($arg1, $arg2,..., $argM)
它会调用doSomethingM
, , 你定义M
args 的地方;