从其他类动态地向类添加静态函数

时间:2014-09-27 11:12:15

标签: php class oop

我有以下课程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...

1 个答案:

答案 0 :(得分:2)

您可以使用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();的实例。

希望它有所帮助!


来源: