我正在尝试创建一个使用PHP的__call()
魔术方法调用方法的类。这个神奇的方法将初始化另一个对象,如下所示:
public function __call($function, $arguments) {
/* Only allow function beginning with 'add' */
if ( ! preg_match('/^add/', $function) ) {
trigger_error('Call to undefined method ' . __CLASS__ . '::' . $function, E_USER_ERROR);
}
$class = 'NamodgField_' . substr($function, 3); /* Ex: $function = addTextField() => $class = NamodgField_TextField */
/* This doesn't work! Because $class is not an object yet */
call_user_func_array( array(new $class, '__construct'), $arguments);
}
该代码的最后一行完全是故障!我只是想弄明白我想做什么。
我希望能够在一个接一个地初始化一个新对象时传递$arguments
,这样每个子类都可以定义它的必要参数。
我找到了使用eval()
的解决方案,但我真的不喜欢它。
任何想法?
答案 0 :(得分:3)
$class = new ReflectionClass('a');
$object = $class->newInstanceArgs(array(1, 2, 3));
class a
{
public function __construct($b, $c, $d)
{
var_dump($b, $c, $d);
}
}