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

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

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

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

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

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

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

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
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

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