我要制作一个(某种)工厂类,它接受可变数量的参数并将它们传递给它将要调用的类
<?php
class A {
private $a;
private $b;
private $c;
public function __construct($a=1, $b=2, $c=3){
$this->a = $a;
$this->b = $b;
$this->c = $c;
}
}
class B {
private $foo;
public function __construct(){
$args = func_get_args();
$this->foo = call_user_func_array(array('A', '__construct'), $args);
}
public function getObject(){
return $this->foo;
}
}
$b = new B(10, 20, 30);
var_dump($b->getObject()); // should return equivalent of new A(10,20,30);
我遇到了这个错误
PHP Warning: call_user_func_array() expects parameter 1 to be a valid callback, non-static method A::__construct() cannot be called statically
最佳答案
在阅读有关 ReflectionClass 的内容时找到了这个答案.这似乎效果最好
<?php
class Factory {
# ...
public function __construct(){
$args = func_get_args();
$a = new ReflectionClass('A');
$this->foo = $a->newInstanceArgs($args);
}
# ...
}
关于具有可变数量参数的 PHP 工厂类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9639745/