我有一个RESTful API,我需要使用CURL进行交互。我创建了一个包装类,它具有一个带CURL代码的静态函数。
class ApiInvoke
{
public static function execute($username, $password, $endpoint, $data = array(), $options = array())
{
//Rest of the CURL code goes here.....
}
}
我创建了一个类,我调用静态APIInvokve类方法来实际执行API调用。下面是上面的ApiInvoke类的消费者类。
需要“api_invoke.php”
class FlowgearConnect
{
//Properties go gere
public function getResults($model, $workflow, $data)
{
$endpoint = $this->getEndpoint($model, $workflow);
$results = array();
if(!is_null($endpoint)){
$results = ApiInvoke::execute('username', 'password', $endpoint, $data array('timeout' => 30));
}
return $results;
}
//....
}
然后我有一个ParentClass类,它创建一个FlowgearConnect对象的实例,该实例可用于子类。但是,所有子类都在同一父类中处理。
class ParentClass
{
private $Flowgear;
public function init()
{
$this->Flowgear = new FlowGearConnect(); //Assuming it has been required somewhere
}
}
然后我们可能有ChildClassA和ChildClassB,它扩展了ParentClass。通过扩展父类的子类的vartue,他们可以访问$ this-> Flowgear对象的实例,因为下面是使用FlowgearConnect类的方法:
class ChildClassA
{
public function getResults()
{
$results = $this->Flowgear->getResults('child_a', 'latestEvents', array());
}
}
ChildClassB具有相同的功能或相当精确,除了它可能负责获取订单列表。
如何在父类中处理这些子类如下所示:
//A function inside the ParentClass to process ChildClassA and ChildClassB
public function processModules()
{
$modules = $request->getModules();
foreach($modules as $module){
require_once "modules/' . $module;
$Module = new $module();
$Module ->getResults();
}
}
沿着这些方向的东西是不对的......基本上,扩展类创建了一个由子类使用的类的实例。在某处某处有些东西不在这里,我想这与我不使用辛格尔顿的设备有关。如果我新的如何关注CURL,我可以。
答案 0 :(得分:0)
由于Rayhan的Http Client类(http://raynux.com/blog/2009/06/13/http-client-class-for-php-development/),我无法想象我永远无法创建一个curl对象的实例。
基本上我想要的是创建一个CURL SINGLETON类,这样我就不会一遍又一遍地创建同一个对象的实例。
以下是我如何实现这一目标的框架:
class Flowgear
{
static private $_instance;
//Rest properties here...
public function __cosntsruct()
{ $this->_token = $this->_username .':'. $this->_passoword; }
public function execute()
{
//Call a class that handles the actual API invocation passing all relevant data
}
static public function &getInstance()
{
if(self::$_instance == null){
self::$_instance = new self;
}
return self::$_instance;
}
}
然后我通过调用Flowgear :: getInstance()获得该类的单个实例;