Я пытаюсь создать класс, методы которого вызываются с использованием магического метода 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()
, но оно мне действительно не нравится.
Есть идеи?