Функция для создания объектов путем передачи массива параметров в __construct()?

Интересно, знает ли кто-нибудь функцию для полностью прагматичного создания объекта класса, аналогичного тому, как работает call_user_func_array(). Что я хочу сделать, так это передать различное количество параметров в __construct().

Мне нужно что-то вроде:

$class = create_object('myobject', $array);

Иметь поведение;

$class = new myobject($array[0], $array[1], $array[2], ...);

Примечание. Это относится к универсальному компоненту фреймворка, поэтому передача всего массива в качестве первого параметра конструкции невозможна.

Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout.
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout.
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для...
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
0
1
292
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете сделать это с помощью функций PHP. Вы можете распаковать массивы как списки аргументов:

function create_object($type, array $args = [])
{
    return new $type(...$args);
}

Хотя не уверен, что это нужно.

Спасибо за ответ. Я вижу, что три точки на самом деле в PHP 5.6 называются оператором знака. Я предполагаю, что нет другого варианта для PHP 5.4+, который является минимальным требованием для этой платформы.

tim 18.12.2020 20:51

Да три точки... php.net/manual/ru/…

AbraCadaver 18.12.2020 20:53

Для 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

Другие вопросы по теме