我有一个产生单例类的类。 (请注意,对于此问题,这是过于简化的代码,例如,它不会检查文件路径是否存在)
class Singleton
{
public function Load($classname, $params)
{
$filepath = 'classes/'.$classname.'.php';
require_once($filepath);
return $classname();
}
}
现在说我想传递一个参数数组,这些参数的大小可以与正在创建的类的构造函数不同。做这个的最好方式是什么?我设想的是call_user_func_array
但是对于类来说?
答案 0 :(得分:2)
使用PHP's Reflection library可以获得一些有趣的结果。
function Load( $class, $args )
{
$reflection = new ReflectionClass( $class );
$object = $reflection->newInstanceArgs( $args );
return $object;
}
这是简化的,意味着使用__autoload
函数,如果你使用它们也不会检查名称空间,而且每次调用它时都会创建一个新的类实例,所以你&& #39;我需要实现一个对象数组来跟踪你已经创建了哪些对象......
对于基本文档:$class
是一个字符串,其中包含您希望实例化的类的名称,而$args
是一个您将要传递给的参数数组__construct( )
方法。
答案 1 :(得分:0)
未测试,但为什么不将它们加载到构造函数中?即返回$classname($params)
;您的构造函数设置为__construct($params = false).
然后您可以检查params是否通过,使您的构造函数参数可选...
这确实意味着你的所有类都需要具有相同的构造函数。
class Foo {
public function __construct($params = false) {
if($params === false)
echo 'not passed';
else
print_r($params);
}
}
$class = 'Foo';
$foo = new $class(array('one', 'two'));
$foo2 = new $class();
输出: 数组([0] =>一[1] =>二) 没有通过