1
我正在尋找在類系列中的抽象級別具有靜態創建方法的最佳方法,該類可以在構造函數中具有可變數量的參數。具有可變數量參數的靜態創建器
例如,如果我知道,富的所有擴展版本將有兩個構造函數的參數,我可以這樣做:
abstract class Foo {
abstract public function __construct($arg1,$arg2);
public static function Create(){
$args = func_get_args();
if(count($agrs)!=2) throw new Exception('Invalid number of arguments');
$classname = __CLASS__;
return new $classname($args[0],$args[1]);
}
}
又是如何在構造函數中沒有定義的情況下和argumunts數量可以有所不同:
abstract class Foo {
public static function Create(){
$args = func_get_args();
$classname = __CLASS__;
return new $classname($args[0],$args[1],$args[2]); //errors if less than 3 arguments were passed
}
}
class Foo_1 extends Foo {
public function __construct($arg1){
//some code...
}
}
class Foo_2 extends Foo {
public function __construct($arg1,$arg2,$arg3){
//some code...
}
}
我能想出的最好是測試過這樣的論點:
public static function Create(){
$args = func_get_args();
$classname = __CLASS__;
switch count($args){
case 0: return new $classname();
case 1: return new $classname($args[0]);
case 2: return new $classname($args[0],$args[1]);
//etc....
}
}
謝謝awgy我會檢查出來。我已經忘記了反思。 – hendepher 2010-04-15 18:48:30