Интересно, знает ли кто-нибудь функцию для полностью прагматичного создания объекта класса, аналогичного тому, как работает call_user_func_array(). Что я хочу сделать, так это передать различное количество параметров в __construct().
Мне нужно что-то вроде:
$class = create_object('myobject', $array);
Иметь поведение;
$class = new myobject($array[0], $array[1], $array[2], ...);
Примечание. Это относится к универсальному компоненту фреймворка, поэтому передача всего массива в качестве первого параметра конструкции невозможна.
Вы можете сделать это с помощью функций PHP. Вы можете распаковать массивы как списки аргументов:
function create_object($type, array $args = [])
{
return new $type(...$args);
}
Хотя не уверен, что это нужно.
Спасибо за ответ. Я вижу, что три точки на самом деле в PHP 5.6 называются оператором знака. Я предполагаю, что нет другого варианта для PHP 5.4+, который является минимальным требованием для этой платформы.
Да три точки... php.net/manual/ru/…
Для PHP <5.6 этого можно добиться с помощью ReflectionClass.
function create_object($class_name, $args=array()) {
$reflect = new ReflectionClass($class_name);
return $reflect->newInstanceArgs($args);
}
Примечание. ReflectionClass в два раза медленнее, чем оператор splat. https://stackoverflow.com/a/24648651/1135440