Выберите метод в зависимости от массива конфигураций - PullRequest
0 голосов
/ 27 апреля 2020

Итак, у меня есть следующий метод импорта записей ( Я удалил ненужные части из метода ):

private function import_records(array $config = []): array
{
    // Loop through all Octopus records
    foreach ($result->data as $record) {
        if ($config['settings_key'] === 'import_profiles') {
            $this->sync_profile($record);
        } else if ($config['settings_key'] === 'import_offices') {
            $this->sync_office($record);
        }
    }

    return $config;
}

Затем я называю его так:

public function import_offices(): array
{
    return $this->import_records([
        'settings_key' => 'import_offices',
        'path' => 'offices',
    ]);
}

Есть ли более чистый способ вызова методов sync_profile и sync_office в операторе if, чем необходимость жестко кодировать $config['settings_key'] === 'string'?

1 Ответ

0 голосов
/ 27 апреля 2020

Вы можете вызвать функцию используя строку в php

foreach ($result->data as $record) {
    $this->{$config["settings_key"]}($record);
}

, тогда ваш $config будет выглядеть следующим образом

return $this->import_records([
        'settings_key' => 'sync_office', // change this to your method name
        'path' => 'offices',
]);

source

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