このメソッドを作成して、コンストラクターだけでなくメソッドでも使用できるようにしました。
私のコンストラクタ:
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
$myObject -> doSomething($arg1, $arg2,..., $argM)
argsdoSomethingM
を定義した場所で ,を呼び出します。M