вызов магии создания новых классов в 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()?

Я мог бы использовать функцию атрибутов() для этого, но мне бы очень хотелось иметь возможность делать это так, как я могу с функциями.

Заранее благодарю,

Author: Sammaye, 2010-09-07

2 answers

Используйте классы отражения PHP: (http://php.net/manual/en/class.reflectionclass.php)

$obj = new ReflectionClass( $classname );

Затем

$ins = $obj->newInstanceArgs( $arguments );

Или

$ins = $obj->newInstance( );

 0
Author: Kolky, 2010-09-07 11:48:01

Я видел следующее где-то в Интернете:

 call_user_func_array(array($obj, '__construct'), $args);
 -1
Author: jwueller, 2010-09-07 11:38:51