Превратить массив в цепочку методов - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть такой массив ...

$data = [
    'columns' => [
        [['increments', 'id']],
        [['string', 'key'], ['index']],
        [['text', 'value']],
    ]
];

Первое значение - это имя функции, а второе - arg / args (параметры). Я хочу, чтобы каждый из них выполнялся следующим образом ($ table) ...

$table->increments('id');
$table->string('key')->index();
$table->text('value');

Я попытался перебрать массив с помощью al oop и использовал функцию в качестве массива [$ functionName ($ params) ], а также "call_user_fun c". Но не удалось. Как лучше всего назвать их, один за другим, как в приведенном выше примере?

1 Ответ

1 голос
/ 18 апреля 2020

Как упомянул @IslamElshobokshy, это сомнительный запрос, который может означать, что ваш дизайн изначально некорректен или неэффективен.

Если вам действительно нужно это сделать, попробуйте что-то вроде этого:

foreach ($data['columns'] as $calls) {
  $currentValue = $table;
  foreach ($calls as $call) {
    $methodName = $call[0];
    $methodArgs = array_slice($call, 1);
    $currentValue = $currentValue->$methodName(...$methodArgs);
  }
}

Используются переменные функции / методы и распаковка аргументов .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...