2014-09-27 55 views
0

我有以下類,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... 
+2

使用'__call'例如,檢查是否方法,管道類存在,之後第在調用它還是不。 – 2014-09-27 11:15:31

回答

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動態這裏。

此外,您也可能想要使用自動加載,這可以讓您在使用類似$api = new API();的情況下返回Pipelines的實例。

希望它有幫助!


來源: