вызов магии создания новых классов в PHP
Я использую магию __вызова в некоторых моих mvc-кодах для создания структуры автоматически загружаемых форм, но я столкнулся с проблемой, с которой, я надеюсь, у кого-то здесь может быть решение.
Магия __вызова принимает два параметра: $имя_метода и $аргументы. Аргументы возвращаются в виде массива аргументов, которые вы вызвали. Обычно эта функция вызывается методами, которые вы можете выполнять как таковые, поэтому введите эти аргументы в функцию:
call_user_func_array($methodName, $arguments);
И это будет способствовать распространению методов подпись с аргументами. Я пытаюсь сделать что-то немного более сложное. Я пытаюсь продвигать конструктор классов таким же образом, имея возможность отправлять, возможно, сжатый массив аргументов, разделенных запятыми, в конструктор классов или просто отправлять аргументы напрямую, но оба они не дают требуемого результата. Когда я отправляю сжатый массив в конструктор, PHP думает, что это строка, а когда я отправляю массив, он думает, что это массив.
Это код, который я использую в банкомате:
public function __call($method, $args){
return $this->init_element(new $method($args['name'], $args['value'], $args['opts']));
}
Что, если бы у меня было 4 аргумента для передачи? Есть ли способ заставить его динамически заполнять конструктор так же, как вы можете для функции, используя call_user_func_array()?
Я мог бы использовать функцию атрибутов() для этого, но мне бы очень хотелось иметь возможность делать это так, как я могу с функциями.
Заранее благодарю,
2 answers
Используйте классы отражения PHP: (http://php.net/manual/en/class.reflectionclass.php)
$obj = new ReflectionClass( $classname );
Затем
$ins = $obj->newInstanceArgs( $arguments );
Или
$ins = $obj->newInstance( );
Я видел следующее где-то в Интернете:
call_user_func_array(array($obj, '__construct'), $args);