В Python, вы можете упаковать и распаковать аргументы так:Довод упаковки и распаковки при создании экземпляра нового экземпляра класса в PHP
def myfunction(arg1, arg2, arg3):
pass
mydict = dict(arg1='foo', arg2='bar', arg3='baz')
myfunction(**mydict)
mylist = ['foo', 'bar', 'baz']
myfunction(*mylist)
Теперь, есть что-то подобное в PHP? У меня есть класс, который передается функции, а также ассоциативный массив, извлеченный из записи базы данных. Я хочу создать экземпляр класса, который принимает аргументы, которые называются такими же, как ключи в массиве. Это можно сделать?
EDIT
Хорошо, так что я определенно не сформулировал свой вопрос правильно. Я хотел динамически создавать новый класс, когда я не знаю ни имени класса, ни количества аргументов заранее.
Я нашел ответ, хотя:
http://php.net/manual/en/book.reflection.php
Вот решение:
class MyClass {
public function __construct($var1, $var2, $var3) {
echo "$var1\n";
echo "$var2\n";
echo "$var3\n";
}
}
$reflector = new ReflectionClass('MyClass');
$args = array('var1'=>'foo', 'var2'=>'baz', 'var3'=>'bar');
$instance = $reflector->newInstanceArgs($args);
Это то, что я делал в прошлом. Просто передайте массив функции (до тех пор, пока функция разрешена) – Matthew