Динамическое добавление статических функций в класс из другого класса

У меня есть следующий класс, API, который «получает» функции от других классов (просто Pipelinesв этом примере), поэтому API :: getPipelines () возвращает Pipelines :: getPipelines () и так далее. Список API-функций будет расти, и этот код будет увеличиваться и увеличиваться, поэтому я ищу способ динамического добавления этих функций к API учебный класс. Например: register_methods_from(array('Pipelines', 'Blah')), Каков наилучший способ сделать это?

class API
{

/**
* The current API instance
*/
private static $_instance = null;

[...]

/**
* Define API funcs
*/
public static function getPipelines() {
return Pipelines::getPipelines();
}
public static function getPipeline($id) {
return Pipelines::getPipeline($id);
}

// etc...

0

Решение

Вы можете использовать магический метод PHP __callStatic за это:

class API
{
static function __callStatic($name, $arguments)
{
if ( ! method_exists('Pipelines', $name))
{
return null; // Or throw error
}

return call_user_func_array('Pipelines::' . $name, $arguments);
}
}

Вы даже можете сделать Pipelines динамический здесь.

Также вы можете вместо этого использовать автозагрузку, которая позволяет вам возвращать экземпляр Pipelines когда что-то вроде $api = new API(); используется.

Надеюсь, поможет!


Источники:

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector