Ben yapıcı bağımsız değişken bir dizi olabilir, bir sınıf bir ailede soyut düzeyde bir statik oluşturma yöntemi için en iyi yol arıyorum.
Foo tüm genişletilmiş sürümleri iki yapıcı argüman olacak biliyor Örneğin, ben bunu:
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]);
}
}
Ama nasıl yapıcı tanımlı değil ve argumunts sayısı değişebilir dava hakkında:
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...
}
}
Ben ile gelebilir iyi böyle geçti argümanları test etmektir:
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....
}
}